【问题标题】:mod_rewrite .htaccess redirect part of a query stringmod_rewrite .htaccess 重定向查询字符串的一部分
【发布时间】:2010-11-09 11:33:52
【问题描述】:

我正在努力解决重定向问题。我需要使用 mod_rewrite 彻底重定向以下 URL .htaccess

http://www.mysite.com/somescript.php?&lang=php&var=1&var=2

到下面

http://www.mysite.com/somescript.php?lang=php&var=1&var=2

所以,基本上我只需要删除

&

之前

lang=php

但是,顺序很重要。有时

&lang=php

出现在查询字符串中的其他变量之后。在这种情况下,我需要

&

继续参与

&lang=php

这可能吗?

总而言之,如果 &lang=php 出现在查询字符串的开头,请删除 &。如果 &lang=php 出现在查询字符串的任何其他位置,则 & 必须保留。

希望这很清楚!

我会自己更改脚本,但不幸的是我不是开发人员,他目前似乎没有太大帮助;这是一个快速修复。

【问题讨论】:

    标签: php .htaccess mod-rewrite query-string


    【解决方案1】:

    我会将?& 替换为?

    RewriteCond %{QUERY_STRING} ^\&(.*)$
    RewriteRule ^somescript\.php$ /somescript.php?%1 [L,R=301]
    

    【讨论】:

    • 您好,难以捉摸,感谢您的回复。我试过这个,显然替换了 somescipt.php,但它会导致内部服务器错误?有什么想法吗?
    • 您是否启用了重写 (RewriteEngine On)?
    • 是的,我启用了重写引擎。如果您尝试它,您会看到它会导致内部服务器错误。
    • @Matt:我的RewriteCond 中有错字。请尝试更正后的版本。
    • 感谢您的回复。我试过你重写的建议。这次它不会导致内部服务器错误,但不幸的是它不会从查询字符串中删除 &。您还有什么建议吗?
    【解决方案2】:

    你为什么不匹配 "?&" 并用 "?" 替换它?

    类似:

    RewriteRule ^(.*)?&(.*) $1?$2 [L]
    

    (未测试)

    因为我认为"?&" 的组合永远不会有效...(?)

    【讨论】:

    • 嗨,西蒙,感谢您的回复。我试过这个,但什么也没发生。它没有删除 &。我什至在一个干净的 .htaccess 文件上尝试过,但是没有用。有什么想法吗?
    • 哦,也许你需要转义?比如:RewriteRule ^(.*)\?&(.*) $1?$2 [L]
    • 谢谢,但这也没有用。查询字符串没有变化。还有其他建议吗?恐怕我对.htaccess只有非常基础的了解。
    • 正则表达式似乎可以工作,在这里进行了测试:regexplanet.com/simple/index.html 也许你有不同的问题......
    • 下面是在干净的 .htaccess 文件中使用的以下确切代码: RewriteEngine On RewriteRule ^(.*)\?&(.*) $1?$2 [L] 上传时,URL 保留为& 插入。困惑。
    猜你喜欢
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    相关资源
    最近更新 更多