2015-10-21 5 views
2

Я в процессе миграции из PHP 5.3.3/Apache 2.2 в PHP 5.6.13/Apache 2.4 и борюсь с правилами перезаписи.Apache 2.4 mod_rewrite и htaccess

В моей подкаталоге у меня есть файл htaccess, но правила перезаписи в нем не применяются.

Options +SymLinksIfOwnerMatch 
RewriteEngine on 
Rewritebase /dir/module/ 

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

RewriteRule ^edit/([0-9]+) /dir/module/edit.php?id=$1 [L] 

Я включил протоколирования переписывания и в этом я вижу запись, которая выглядит так, как будто пытался переписать собирается edit.php/186591, а не edit.php? ID = 186591, но я не знаю, если это нормально или нет:

[Wed Oct 21 00:34:52.207212 2015] [rewrite:trace3] [pid 19507] mod_rewrite.c(468): 
[client 192.168.1.1:43597] 1.2.3.4 - - [www.domain.com/sid#7f057ae2d120 
[rid#7f057b094380/subreq] [perdir /home/domain/public_html/dir/module/] 
applying pattern '^edit/([0-9]+)' to uri 'edit.php/186591' 

Где я иду не так?

+0

'Опции + SymLinksIfOwnerMatch -MultiViews' – hjpotter92

+0

Hi - Я уже пробовал, но получаю ошибку 500 и "Option не MultiViews разрешено здесь" в error_log – bhttoan

+0

В конфигурационном файле сервера, положить' AllowOverride Options = Все , MultiViews'; перезапустите сервер и проверьте. Также; поставьте более конкретное '^ edit/([0-9] +)' rewrite над общей переписыванием 'RewriteRule^(. *) $ $ 1.php' – hjpotter92

ответ

1

Проблема возникла из-за включенной опции MultiViews. Поместите следующее в файл конфигурации сервера:

AllowOverride Options=All,MultiViews 

, а затем, в файле Htaccess, отключить MultiViews директиву:

Options +SymLinksIfOwnerMatch -MultiViews 

Это должно эффективно решить эту проблему. Я также хотел бы сказать (так же, как я уже говорил выше), что перед любым общим правилом в ваших файлах htaccess вы должны ввести более конкретные правила. Таким образом,

RewriteEngine on 
Rewritebase /dir/module/ 

RewriteRule ^edit/([0-9]+)$ edit.php?id=$1 [L] 

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ $1.php [L] 
Смежные вопросы