棘手的 .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.....
我卡住了,甚至阅读了大量的论坛帖子也无济于事。
挑战: 我需要重写 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.....