我对此变得疯狂.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]
(...)
答案 0 :(得分: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:我还对您的规则进行了一些细微更改,以使正则表达式更好。