2015-10-21 95 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

嗨 - 我已經嘗試過,卻得到了一個500錯誤「選項不是多視圖這裏不允許」中的error_log – bhttoan

+0

在服務器的配置文件,把'的AllowOverride選項=所有,MultiViews';重新啓動服務器並測試。也;在一般性重寫'RewriteRule ^(。*)$ $ 1.php'上面放置更具體的'^ edit /([0-9] +)' – 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]