棘手的 .htaccess mod_rewrite 语法问题

Tricky .htaccess mod_rewrite syntax problem

我卡住了,甚至阅读了大量的论坛帖子也无济于事。

挑战: 我需要重写 URI 并维护查询

示例 1:

example.com/test/23/result/7

应重定向到

下的脚本
example.com/test/

这与像这样的 .htaccess 条目一起工作得很好:

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^test/(.+)$ test/?s=

URI 显示不变。被调用的脚本被调用,附加的子目录定义可以通过变量 $_GET['s'] 或 $_SERVER['REQUEST_URI'] 在 PHP 中检索。到目前为止一切都很好。添加查询字符串时问题开始:

示例 2:

example.com/test/23/result/7?id=16

将被重定向到

下的相同脚本
example.com/test/?id=16

即使我将 [QSA] 添加到重写规则,URI 也无法正确解析。我尝试了几种方法来启动重定向。都失败了。重定向要么指向一个不存在的地址,要么查询字符串丢失。除了初始 URI 子目录信息外,我还需要在我的脚本中评估查询字符串。两条数据都需要传给它

有人有解决办法吗?

非常感谢您分享您的专业知识!

我会遵循以下 htaccess 规则。这假设您有 index.php 文件,该文件负责处理稍后规则中不存在的页面请求。

RewriteEngine ON
##Rules for handling index.php url here.
RewriteCond %{THE_REQUEST} \s/([^/]*)/.*\?index\.php\s [NC]
RewriteRule ^ %1?%{QUERY_STRING} [NC,L]
##Rules for non-existing pages here.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

###Rest of your rules go here.....