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