当前状态: 首先,我想指出这个问题与我前两天发布的问题有很大关系。自那时以来,我一直试图解决我遇到的问题,并遇到了不同的问题。我希望这不构成任何“双重职位”?结合两条Mod重写规则
我已经创建了两个似乎独立工作的mod重写规则,以创建所需的效果。这些如下:
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(.*/)?([A-Za-z0-9.-]+)_([A-Za-z0-9.-]*) $1?$2=$3&%1 [L]
上述规则从这样一个URL:
www.site.com/param1/thing/sortorder_5/getparam2_6/
并将其转换成这样:
www.site.com/param1/thing/?sortorder=5&getparam2_6/
第二规则如下:
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(.*/)?((?:cmd)[^/]*)/((?!(?:cmd)[.+]*)(.+)) $1?$2=$3&%1 [L]
这需要一个这样的URL:
http://www.site.com/cmd/param1/thing/cmd2/param2/
并将其转换成这样:
http://www.site.com?cmd=param1/thing&cmd2=param/
期望的结果:
我想合并这两个重写规则,所以我可能能够做到以下几点:
http://www.site.com/cmd/param1/cmd2/param2/sortorder_5
转换为:
http://www.site.com?cmd=param1&cmd2=param2&sortorder=5
任何告诉我如何开始这样做的人会是最善良的。我已经尝试了很多天的mod重写代码,没有运气。我的正则表达式/ mod重写知识确实没有达到要求,所以我很抱歉!整个mod重写代码粘贴在下面。谢谢。
RewriteEngine On
# This block works fine in isolation
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(.*/)?([A-Za-z0-9.-]+)_([A-Za-z0-9.-]*) $1?$2=$3&%1 [L]
# This block also works fine in isolation
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(.*/)?((?:cmd)[^/]*)/((?!(?:cmd)[.+]*)(.+)) $1?$2=$3&%1 [L]
# This block should append the query string to index.php (front controller)
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^.*$ index.php?%1 [L]
如果你有过'index.php'我建议只是在做类似的东西'重写规则^(。*)$控制?query = $ 1 [L,QSA]'并解析脚本中的查询。这样,除了更容易地解析请求之外,您不依赖于mod_rewrite规则(可以轻松地与其他服务器一起使用)。 – Qtax
顺便说一句,你为什么使用'RewriteCond%{QUERY_STRING}(。*)'那样?我建议在你的重写规则中使用'QSA'标志。 – Qtax