Apache .htaccess для перенаправления index.html в корень, почему FollowSymlinks и RewriteBase? - PullRequest
5 голосов
/ 22 сентября 2010

Чтобы перенаправить все somefolder/index.html (а также somefolder/index.htm) на somefolder/, я использую это простое правило перезаписи в файле Apache .htaccess:

RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*\/index\.html?\ HTTP/
RewriteRule ^(.*)index\.html?$ "/$1" [R=301,L]

Это хорошо работает!

Но на Google группы они предлагают также добавить:

Options +FollowSymlinks 
RewriteBase / 
  1. Может ли кто-нибудь так любезно объяснить мне, почему я должен добавить эти последние строки, и объяснить немного, что они значат и что они делают? Существует ли потенциальный риск не добавлять эти строки?

Большое спасибо,

1 Ответ

20 голосов
/ 22 сентября 2010

Почему им предлагают:

Предполагается, что вы добавите Options +FollowSymlinks, потому что для работы mod_rewrite необходимо, чтобы была включена следующая символьная ссылка, и есть вероятность, что, хотя вам может быть разрешено ее включить, она не будет основная конфигурация сервера. Я подозреваю, что причина, по которой необходимо следовать символическим ссылкам, заключается в том, что модуль делает несколько вызовов на apr_stat(), что похоже на необходимость следовать символическим ссылкам для получения информации о файле во всех случаях.

Что касается RewriteBase, это обычно не требуется. Документация продолжается об этом , но, поскольку файлы большинства людей do живут где-то под DocumentRoot, обычно это служит цели, только если вы перенаправляете внешне, и вы используете URL-адреса, относящиеся к каталогу. Чтобы проиллюстрировать, что я имею в виду, рассмотрим следующее:

RewriteEngine On

RewriteRule ^redirect index.html [R,L]

Запрос example.com / redirect приведет к внешнему перенаправлению на example.com / full / path / to / web / root / index.html . Причина этого заключается в том, что перед обработкой перенаправления mod_rewrite повторно добавляет текущий путь к каталогу (значение по умолчанию RewriteBase). Если вы изменили RewriteBase на /, то информация о пути будет заменена этой строкой, поэтому запрос для index.html теперь будет запросом для / index.html .

Обратите внимание, что вы могли просто сделать это явно и при замене, независимо от значения RewriteBase:

RewriteEngine On

RewriteRule ^redirect /index.html [R,L]

... работает, как задумано, например. Однако, если у вас есть много правил, которым нужна общая база и которые перемещаются между каталогами, или ваш контент не находится в корневом каталоге, было бы полезно установить в этом случае RewriteBase.

Риск их не использовать:

Нет абсолютно никакого риска для безопасности, если вы не укажете Options +FollowSymlinks, потому что если вы этого не сделаете, и это не задано конфигурацией основного сервера, mod_rewrite всегда вернет 403 Запрещено. Это довольно проблематично для людей, пытающихся просматривать ваш контент, но это определенно не дает им никакой расширенной возможности использовать ваш код.

Не задано RewriteBase может раскрыть путь к вашему веб-контенту, если в одном из ваших файлов .htaccess был неправильно настроен набор правил, но я не уверен, что есть основания полагать, что это угроза безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...