2017-02-21 23 views
0

Запуск Apache 2 на Ubuntu 14.04. rewrite_module включен (sudo apachectl -M).Apache - удалять расширения .php и .html с помощью mod_rewrite в httpd.conf

В /etc/apache2/apache2.conf (версия Ubuntu из httpd.conf) У меня есть следующий блок кода:

<Directory /var/www/> 
    <IfModule mod_rewrite.c> 
     RewriteEngine On 

     RewriteCond /%{REQUEST_FILENAME}.php -f 
     RewriteRule ^([a-zA-Z0-9_-\s]+)/$ /$1.php 

     RewriteCond /%{REQUEST_FILENAME}.html -f 
     RewriteRule ^([a-zA-Z0-9_-\s]+)/$ /$1.html 
    </IfModule> 

    <IfModule mod_expires.c> 
     ... 

     <IfModule mod_headers.c> 
      ... 
     </IfModule> 
    </IfModule> 
</Directory> 

sudo service apache2 restart Ран.

Когда я посещаю URL-адрес моего сервера без расширения файла .php, я получаю 404! Почему это не работает?

ответ

0

Я, наконец, понял это. Что для меня работало:

<Directory /var/www/> 
    <IfModule mod_rewrite.c> 
     RewriteEngine On 

     RewriteCond %{REQUEST_FILENAME}.php -f 
     RewriteRule ^(.*)$ $1.php [L] 

     RewriteCond %{REQUEST_FILENAME}.html -f 
     RewriteRule ^(.*)$ $1.html [L] 
    </IfModule> 

    <IfModule mod_expires.c> 
     ... 

     <IfModule mod_headers.c> 
      ... 
     </IfModule> 
    </IfModule> 
</Directory> 
0

Ваши правила отлично работают для меня на htaccess контексте. Но когда я добавил эти правила в serverConfig контекст Сервер ответил 404 не найден. На самом деле проблема в том, что в контексте serverConfig требуется косая черта в шаблоне RewriteRule. Поэтому вам нужно добавить ведущую косую черту в шаблон вашего правила:

RewriteRule ^/([a-zA-Z0-9_-\s]+)/?$ /$1.php 
+0

К сожалению, это тоже не сработало. :( – torjinx