2011-02-07 1 views
3

У меня есть очень простой двухстраничный веб-сайт: домашняя страница и страница. То, что я пытаюсь сделать, это использовать Htaccess переписать URL, так что выглядят как:Псевдоним внутри htaccess и блокировать доступ к исходному файлу? (Переписывание URL)

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

В фактической структуре папок сайта на главной странице находится /index.php, а о странице - /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, например так:

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

Это отлично работает.

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

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

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

ответ

3

Проверьте файлы $_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 Module mod_rewrite для полной документации по mod_rewrite.

+0

Ничего себе, это было быстро! И спасибо - я был настолько сосредоточен на использовании htaccess, что и альтернатива httpd.conf, которую я даже не думал делать с самого php. Прекрасно работает! – johnkavanagh

Смежные вопросы