Как Apache может переписывать URL-адреса без включенного или настроенного mod_rewrite?
Я работаю над редизайном сайта с моего сервера разработки.Я использовал структуру каталогов для разделов сайта, но я думаю о переходе на переписывание URL-адресов и размещение связанных файлов в корне сайта.
Например, на странице about есть подкаталог с названием about, в котором содержится index.phpкоторый обслуживается, когда запрос http://www.example.com/about. Я планирую изменить это так, чтобы about.php из корневого каталога сайта обслуживался, даже если запрос не включает расширение php.
На моемНа сервере разработки проблема заключается в том, что URL-адреса уже переписываются, хотя у меня нет ни одного файла .htaccess
в иерархии путей.
Конфигурация Apache - это стандартная конфигурация Ubuntu, и я подозреваю, что оначто-то уникальное для Ubuntu, но я не могу найти причину.
Вот некоторые наблюдения, которые я сделал:
- / etc / apache2 / httpd.conf пуст, ноКонфигурация находится в /etc/apache2/apache2.conf, который, в свою очередь,
Include
конфигурационных файлов из нескольких других каталогов. - Не было.Файлы htaccess в любой части иерархии этого сайта.Я проверил все каталоги, начиная с / var / www
- . Файлы .conf или .load в / etc / apache2 не имеют никаких ссылок для перезаписи, кроме файла rewrite.load в / etc / apache2 / mods-доступно.
- Я установил директиву
LogWarning
для отладки.Когда я захожу на страницу без расширения .php, в журнале ошибок отображается URL-адрес с расширением, а в журнале доступа - без расширения и статус HTTP 200.Страница обслуживается правильно. - Если я добавлю
.htaccess
файл с соответствующей конфигурацией, я получу ошибку .htaccess: Invalid command 'RewriteEngine'
.... mod_rewrite даже не загружался по умолчанию. - Если я включаю mod_rewrite, ссылаясь на файл загрузки в / etc / apache2 / mods-enabled, он будет работать как положено, то есть точно так же, какесли я не включил его.
access.log показывает:
127.0.0.1 - - [16/Jan/2012:05:36:35 +0800] "GET /dev/ghodmode.com/h5bp/ HTTP/1.1" 200 3602 "http://alienware/dev/ghodmode.com/h5bp/experiments" "Mozilla/5.0 (Ubuntu; X11; Linux x86_64; rv:8.0) Gecko/20100101 Firefox/8.0"
, а error.log показывает:
[Mon Jan 16 05:23:23 2012] [debug] mod_deflate.c(615): [client 127.0.0.1] Zlib: Compressed 5347 to 1876 : URL /dev/ghodmode.com/h5bp/experiments.php, referer: http://alienware/dev/ghodmode.com/h5bp/
Если я добавлю.htaccess
file:
[Mon Jan 16 05:34:33 2012] [alert] [client 127.0.0.1] /var/www/dev/ghodmode.com/h5bp/.htaccess: Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration, referer: http://alienware/dev/ghodmode.com/h5bp/experiments
Обновление
Благодаря предоставленным ответам, я читал и узнал несколько вещей.Суть в том, что я использую стандартную Ubuntu установку Apache2, и я не изменил никаких настроек конфигурации по умолчанию.Итак, ни одна из предложенных причин не установлена.
Конечно, есть вероятность, что я неправильно понял часть документации.Впервые я прочитал о некоторых из этих опций.
Multiviews
Multiviews обеспечивает лучшее объяснение этого сценария, но для этого требуетсявведите карту или параметр MultiViews
, заданный для пути.У меня есть только одна карта типов (/etc/apache2/mods-enabled/mime.conf) для 'var', а опция MultiViews
установлена только для / usr / share / apache2 / icons.Таким образом, это не могло быть.
Redirect & RedirectMatch
Redirect & RedirectMatch могли бы дать хорошее объяснение этому поведению, но для этого требуется директиваза каждое перенаправление.У меня нет ни одного из этих наборов, и любой путь, который я печатаю, служит связанному файлу php, если он существует.Кроме того, если бы это было причиной, я думаю, что access.log сгенерирует статус 3xx вместо 200, если это было перенаправление.
Alias & AliasMatch
Alias & AliasMatch , как и Redirect & RedirectMatch, требует установки директивы для каждого ресурса.У меня есть только псевдоним, заданный для /icons/.
FallbackResource
FallbackResource идентифицирует один ресурс для обслуживания, когда запрошенный ресурс отсутствует.В моем случае, когда запрошенный ресурс отсутствует, он обслуживает найденный ресурс, добавляя «.php» в конец запроса.Я также дважды проверил, и никакие директивы FallbackResource не установлены.
Вот пример команды, которую я использую, чтобы подтвердить, что определенная опция нигде не установлена:
find /etc/apache2 -name "*.conf" -exec grep -li "FallbackResource" {} \;
Обновление № 2:
В моем поиске была дырадля опции MultiViews.Я искал только файлы с расширением .conf или .load, но некоторые из файлов конфигурации вообще не имеют расширения.Параметр MultiViews задается в файле конфигурации сайта по умолчанию /etc/apache2/sites-enabled/000-default.
Спасибо @zneak за первый ответ, хотя он сделал это в комментарии.И спасибо @regilero, который косвенно показал мне, чего мне не хватало, используя другой синтаксис для grep
из синтаксиса, к которому я привык.