2014-10-19 71 views
2

我轉向瘋狂與此的.htaccess:兩個簡單的重寫規則的一排......但奇怪的結果在最後

SetEnv PHP_VER 5_4 
AddDefaultCharset UTF-8 
Options +FollowSymlinks 
RewriteEngine on 
RewriteBase/

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule .* - [L,R,QSA] 

#-------------------------------------------------- 
# Format type management -------------------------- 
#-------------------------------------------------- 
RewriteRule ^(.*)\.(html|json|xml)$ $1?_format_=$2 [QSA,NC] 

#-------------------------------------------------- 
# Route management -------------------------- 
#-------------------------------------------------- 
RewriteCond %{REQUEST_URI} !^/index.php$ [NC] 
RewriteRule ^(.*)$ index.php?_route_=$1 [QSA,NC,L] 

,我試圖重定向:

http://mydomain/album/11.json 

http://mydomain/index.php?_route_=album/11&_format_=json 

抱歉,系統我得到這個:

http://mydomain/index.php?_route_=album/11/11.json&_format_=json 

我真的不明白什麼是錯的論文拖規則,以及如何來這樣的結果......

任何想法?

THX ...


順便說一句,它完美的作品時,我用這個來代替(第一個中添加第二個規則,並添加L標誌),但是這不是我想要的方式要做到這一點:

(...) 
#-------------------------------------------------- 
# Format type management -------------------------- 
#-------------------------------------------------- 
RewriteRule ^(.*)\.(html|json|xml)$ index.php?_format_=$2&_route_=$1 [QSA,NC,L] 
(...) 

回答

2

偉大的問題,我必須說。

您需要DPI flag解決你的問題(它需要拋棄舊的路徑信息)

的DPI標誌導致重寫的URI的PATH_INFO部分被丟棄。

讓你的規則是這樣的:

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule^- [L] 

#-------------------------------------------------- 
# Format type management -------------------------- 
#-------------------------------------------------- 
RewriteRule ^([^.]+)\.(html|json|xml)$ $1?_format_=$2 [DPI,QSA,NC] 

#-------------------------------------------------- 
# Route management -------------------------- 
#-------------------------------------------------- 
RewriteRule ^((?!index\.php$).+)$ index.php?_route_=$1 [QSA,NC,L] 

PS:我也取得了規則中的一些細微的變化,使正則表達式更好。

+1

DPI標誌很好,你救了我的一天。我會認真看待你的正則表達式變化,我不知道'?!'語法。謝謝。 – 2014-10-19 12:03:31

+0

很高興解決。 ''!''是一個負面的前瞻,它基本上保存了一個來自你以前的規則的'RewriteCond'。 – anubhava 2014-10-19 12:11:07