【问题标题】:Tricky .htaccess mod_rewrite syntax problem棘手的 .htaccess mod_rewrite 语法问题
【发布时间】:2021-09-18 23:06:18
【问题描述】:

我被卡住了,即使阅读大量论坛帖子也没有帮助。

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

示例 1:

example.com/test/23/result/7

应重定向到下的脚本

example.com/test/

这样的 .htaccess 条目效果很好:

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

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

示例 2:

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

应重定向到下的同一脚本

example.com/test/?id=16

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

有人有解决办法吗?

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

【问题讨论】:

    标签: .htaccess redirect mod-rewrite url-rewriting query-string


    【解决方案1】:

    我会遵循 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.....
    

    【讨论】:

    • 亲爱的拉文德,非常感谢。它完美地工作。你拯救了我的一天。很抱歉,我答复晚了。我只是兼职工作。最好的,乌韦
    猜你喜欢
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    相关资源
    最近更新 更多