Nano Hash - криптовалюты, майнинг, программирование

Как запретить HTTP-доступ к файлам PHP?

Я пытаюсь переписать URL-адреса, используя mod_rewrite. Это правило перезаписи в моем файле .htaccess:

RewriteRule ^([a-z]+)/?$ $1\.php

Если пользователь введет example.com/contact, будет загружено содержимое файла example.com/contact.php.

Проблема в том, что у меня остается дублированный контент, потому что теперь и example.com/contact, и example.com/contact.php отображают одну и ту же информацию.

Я хотел бы запретить доступ ко всем файлам PHP, если пользователи пытаются получить доступ через HTTP, но разрешают доступ к сценарию (мне нужно, чтобы мое приложение работало). Как я могу сделать это с помощью .htaccess?

Все, что я пробовал, блокирует как скрипт, так и HTTP-доступ. Например, использование следующего в .htaccess запрещает доступ по HTTP, но также приводит к тому, что мой скрипт перестает работать:

Deny from all

  • вам лучше выбрать другой псевдоним. Иначе у вас бы постоянно были конфликты. 15.05.2015

Ответы:


1

Вы можете использовать THE_REQUEST для этого.

Ваш код должен выглядеть так сейчас

Options -MultiViews
RewriteEngine On

# if file exists and has ".php" extension then redirect to extensionless equivalent
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{THE_REQUEST} \s/([^/]+)\.php(?:\s|\?) [NC]
RewriteRule ^ /%1? [R=301,L]

# if uri + ".php" exists then internally rewrite to "uri.php"
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^([^/]+)$ /$1.php [L]
  • http://example.com/contact.php перенаправит на http://example.com/contact
  • http://example.com/contact будет внутренне переписан на /contact.php
14.05.2015
  • Работает потрясающе. Вам не обязательно, потому что я собираюсь проголосовать и принять все равно, но есть ли шанс объяснить, что происходит? 15.05.2015
  • Использование THE_REQUEST позволяет вам избежать сопоставления внутренних перезаписей с сервера (вот почему у вас был цикл). Я также добавил строку, описывающую каждое правило 15.05.2015
  • Спасибо за объяснение, все понятно. Это такое отличное решение! Я заметил одну вещь: мой файл example.com/index.php перенаправлялся на example.com/index. Это, вероятно, полезно только для моей собственной настройки, но для обеспечения перенаправления index.php и index на example.com я добавил следующее после вашего последнего правила перезаписи: RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index RewriteRule ^index\.php$ / [L,R=301] - Еще раз спасибо! 15.05.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..