【问题标题】:Append a parameter to a querystring with mod_rewrite使用 mod_rewrite 将参数附加到查询字符串
【发布时间】:2012-12-24 17:55:59
【问题描述】:

我想使用 mod_rewrite 将参数附加到查询字符串的末尾。我知道我可以使用 [QSA] 标志来做到这一点。

但是,我希望仅当查询字符串中不存在该参数时才附加该参数。所以,如果查询字符串是:

http://www.mysite.com/script.php?colour=red&size=large

我希望将上述网址重定向到

http://www.mysite.com/script.php?colour=red&size=large&weight=heavy

weight=heavy 仅在此特定参数最初不存在时才附加到查询字符串的末尾!如果特定参数已经在 URL 中,则不需要重定向。

任何人都可以建议将代码放入我的 .htacess 文件中以执行此操作吗?

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

    编辑:对其进行了测试和修改,现在它适用于我

    如果根本没有重量,我假设您想添加一个默认重量参数:

    RewriteEngine on
    RewriteBase /
    RewriteCond %{QUERY_STRING} !weight=
    RewriteRule ^script.php     script.php?weight=heavy [R,L,QSA]
    

    这与@coreyward 的回答基本相同,但更具体一些。 (R 标志,使更改可见,并且权重参数不必很重。)

    希望这会有所帮助!

    【讨论】:

    • 您好,感谢您对代码的澄清。我将它添加到我的 .htaccess 中,但不幸的是我无法让它工作!我确实启用了 mod_rewrite .. 干杯。
    • 稍作修改并测试。现在为我工作。
    【解决方案2】:

    这是一件非常奇怪的事情。就好像您正在为您的系统设置一个默认值,这是一件非常标准的事情。问题在于,在您真正配置 Apache 的 VHost 定义或 .htaccess 文件中设置该默认值是不可维护且尴尬的。

    我建议不要这样做,但这是一种快速而肮脏的方式来做你正在寻找的事情:

    RewriteCond %{QUERY_STRING} !weight=heavy
    RewriteRule /script.php /script.php?weight=heavy [QSA]
    

    【讨论】:

    • 您好,感谢您的回答。你是对的,我目前正在寻找一个快速而肮脏的解决方案。不幸的是,我无法让你的代码工作,但我可以看到你要去哪里......
    猜你喜欢
    • 1970-01-01
    • 2013-07-20
    • 2012-02-05
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多