Назад | Перейти на главную страницу

.htaccess в Apache2 для URL-адресов php

Я пытаюсь сопоставить любой URL-адрес, например localhost/first к localhost/first.php используя mod_rewrite для Apache в Ubuntu 15.04.

Вот шаги.

  1. Установлен Apache2, PHP5 с использованием (apt-get apache2, php5) Включен PHP в Apache, поэтому phpinfo() выводит правильную информацию.
  2. a2enmod переписать, перезапустить apache
  3. В /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
    
  4. .htaccess в /var/www/html,

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^\.]+)$ $1.php [NC,L]
    
  5. chmod 644 /var/www/html/.htaccess

  6. Перезагрузите Apache

Но запрос вроде /localhost/second не переводится на second.php.

  1. Отредактировано .htaccess, изменил последнюю строку на RewriteRule ^second$ second.php. Но успеха нет.

  2. В Apache error.log я вижу ошибку:

    AH00687: Согласование: обнаружен файл (ы), соответствующий запрос: / var / www / html / second (согласование невозможно).

Может кто-нибудь помочь?

Options Indexes FollowSymLinks MultiViews

В MultiViews вариант, вероятно, вызывает эту проблему. Это следует удалить. MultiViews (часть mod_negotiation) попытается внутренне переписать запрос для /file (где некоторые /file<.ext> существует в файловой системе) путем тестирования различных файлов, найденных в этом каталоге, и будет обслуживать файл, соответствующий соответствующему типу mime. Это случилось перед mod_rewrite работает и может привести к конфликту (поскольку вы пытаетесь сделать то же самое с mod_rewrite).