Псевдоним внутри htaccess, а заблокировать доступ к оригинальному файлу?(Перезапись URL) - PullRequest
3 голосов
/ 07 февраля 2011

У меня есть очень простой двухстраничный веб-сайт: домашняя страница и страница о программе. Я пытаюсь использовать htaccess, чтобы переписать URL-адреса так, чтобы они выглядели так:

  • domain.com / (для домашней страницы)
  • domain.com / about (для страницы about)

В фактической структуре папок сайта, домашняя страница - /index.php, а страница about - /about.php (обе отображаются в корне).

Я изучал использование псевдонимов, но, к сожалению, мой хостинг (Dreamhost) не разрешает доступ к httpd.config, так что это не из окна, и мне осталось использовать правила перезаписи в файле htaccess.

Поскольку файл index.php будет отображаться в корне домена (http://domain.com/) автоматически, мне до сих пор удавалось правильно отобразить страницу about на domain.com / about , используя следующие строки:

RewriteEngine On
RewriteRule ^about$ /about.php

Я также использую перенаправления 301, так что, например, domain.com / about / (с завершающей косой чертой) также перенаправляет обратно на URL / about примерно так:

Redirect 301 /about/ http://domain.com/about 

Это прекрасно работает.

Однако файлы index.php и about.php по-прежнему также отображаются, если вы переходите по правильному URL-адресу в браузере (например, domain.com / about.php ), поэтому в результате поисковые системы видят (и индексируют) две версии каждой страницы! Я установил правильные канонические метаданные на каждой странице, но это, похоже, не оказало никакого влияния (канонические метаданные были в разметке страницы с момента запуска сайта).

Итак, как мне сначала выполнить «слепое» переписывание (если не использовать более технический термин) двух файлов, чтобы URL-адреса выглядели правильными, а также эффективно «блокировать» прямой доступ к файлам, гарантируя, что если кто-то попытается получить доступ к файлам php напрямую, URL-адрес по-прежнему будет отображаться в браузере посетителя как «красивые» версии, а не как полное имя файла и расширение php?

Любой совет был бы чрезвычайно признателен, я изучал это в течение еще нескольких дней (я не думаю, что здесь уже есть что-то совершенно такое же, как это где-то здесь), и я не могу по жизни работать этим вне!

1 Ответ

3 голосов
/ 07 февраля 2011

Проверьте $_SERVER['REQUEST_URI'] в файлах PHP. Если оно содержит имя файла (вместо того, что вы хотите URI), то сделайте 301 или 404 или что вы хотите. Остальное обслуживайте страницу как обычно.

Вы также можете сделать

RewriteRule ^about.php - [L,gone]

или

RewriteRule ^about.php /about [L,R=301]

но это должно идти раньше ваших RewriteRule с. Он отправит ответ 410 Gone или 301 Moved Permanently, если страница открыта с помощью /about.php. См. Модуль Apache mod_rewrite для полной документации mod_rewrite.

...