【问题标题】:$_GET variables disappear when mod_rewrite rewrites .html to .php当 mod_rewrite 将 .html 重写为 .php 时,$_GET 变量会消失
【发布时间】:2012-06-29 08:32:47
【问题描述】:

我正在使用 mod_rewrite 将 .html 重写为 .php。

RewriteRule ^([0-9a-zA-Z-_]+)\.html$ index.php?p=$1 [L]

但是,我在 URL 中使用 $_GET 时遇到了问题。如果请求的 URL 采用以下格式,则可以正常工作:index.php?a=f1

但是,如果将其重写为 home.html?a=f1,则没有。

假设它只是浏览器在点击 .html 后停止读取。有没有办法让这个工作?

【问题讨论】:

    标签: php apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    您必须致电home.htm&a=f1

    隐藏的网址是:index.php?p=home&a=f1

    【讨论】:

      【解决方案2】:

      您需要添加QSA 标志:

      RewriteRule ^([0-9a-zA-Z-_]+)\.html$ index.php?p=$1 [QSA,L]
      

      原因在文档中有最好的解释:

      当替换 URI 包含查询字符串时,默认行为 RewriteRule 的就是丢弃已有的查询字符串,并替换它 与新生成的。使用 [QSA] 标志会导致查询 要组合的字符串。

      【讨论】:

      • 这会导致内部服务器错误。
      • 我删除了 L 标志,它正在工作。如果我将其保留为 [QSA, L],则会出现内部服务器错误。
      • 标志内不应有空格。 [QSA, L] 不好,[QSA,L] 好。
      猜你喜欢
      • 2011-07-07
      • 2012-03-01
      • 2012-06-13
      • 2010-12-02
      • 2014-08-27
      • 2013-10-29
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      相关资源
      最近更新 更多