Я пытаюсь сопоставить любой URL-адрес, например localhost / first
, на localhost / first.php
, используя mod_rewrite для Apache в Ubuntu 15.04.
Вот шаги.
phpinfo ()
выводит правильную информацию. В /etc/apache2/sites-enabled/000-default.conf
добавлено следующее в нужном месте.
<Каталог / var / www / html>
Параметры Индексы FollowSymLinks MultiViews
AllowOverride All
Заказать разрешить, запретить
разрешить от всех
- Перезагрузите Apache
.htaccess
в / var / www / html
,
RewriteEngine на
RewriteCond% {REQUEST_FILENAME}! -F
RewriteCond% {REQUEST_FILENAME}! -D
RewriteRule ^ ([^ \.] +) $ $ 1.php [NC, L]
chmod 644 /var/www/html/.htaccess[12118 visibleRestart Apache
Но запрос типа / localhost / second
не преобразуется в second.php
.
Отредактировано .htaccess
, последняя строка изменена на RewriteRule ^ second $ second.php
. Но успеха нет.
В Apache error.log я вижу ошибку:
AH00687: Согласование: обнаружены файлы, соответствующие запросу: / var / www / html / second (согласовать невозможно).
Кто-нибудь, пожалуйста, помогите?
Параметры Индексы FollowSymLinks MultiViews
Параметр MultiViews
, вероятно, вызывает эту проблему. Это следует удалить. MultiViews
(часть mod_negotiation) будет пытаться внутренне переписать запрос для / file
(где некоторые / file <.ext>
существуют в файловой системе) путем тестирования различные файлы, найденные в этом каталоге, и будут обслуживать файл, соответствующий соответствующему типу mime. Это происходит до того, как mod_rewrite запускается и может привести к конфликту (поскольку вы пытаетесь сделать то же самое с mod_rewrite).