【问题标题】:htaccess mod_rewrite with dynamic parametershtaccess mod_rewrite 与动态参数
【发布时间】:2009-06-29 15:07:57
【问题描述】:

我是 mod_rewrite 的新手。我正在尝试将一个 URL 转发给另一个,但我无法让它工作。

假设我想转发这个 URL: /cansas.php?m=2&id=2-0-0-0&sid=cansas 到 /cansas-is-good-for-you 并让标头以 301 响应,或者只是通过 [R] 更新 URL。

我的 .htaccess 中有这个:

选项 +FollowSymlinks

重写引擎开启

RewriteRule ^cansas.php?m=2&id=2-0-0-0&sid=cansas$ cansas-is-good-for-you [NC,R=301]

我想我可以做一个简单的转发,但在某个地方它停止工作。如果我剪掉 ?m=2&id= 等,它只会将 cansas 部分转发到新部分,所以它看起来像这样: cansas-is-good-for-you?m=2&id=2-0-0-0&sid=坎萨斯。

当我的 URL 字符串中有多个动态参数时,如何转发它?我需要转发的页面示例:

/cansas.php?m=2&id=2-0-0-0&sid=cansas

/cansas.php?m=2&id=2-1-0-0&sid=cansas

/cansas.php?m=2&id=2-2-0-0&sid=cansas

任何帮助将不胜感激:)

也许不可能这样做?我目前设置的方式是我想使用名为 /cansas-is-good-for-you 的新 URL,它从源 /cansas.php?m=2&id=2-0-0-0&sid 读取=cansas,但浏览器中显示的 URL 应为:/cansas-is-good-for-you。我需要转发那个旧的 cansas.php 吗?新 URL 的 URL :)

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    您需要使用RewriteCond 指令检查URL 的查询,因为RewriteRule 指令只处理URL 路径:

    RewriteCond %{QUERY_STRING} ^m=2&id=2-0-0-0&sid=cansas$
    RewriteRule ^cansas\.php$ /cansas-is-good-for-you? [L,R=301]
    

    如果您只想检查一个参数,请使用:

    RewriteCond %{QUERY_STRING} ^([^&]*&)*sid=cansas(&.*)?$
    RewriteRule ^cansas\.php$ /cansas-is-good-for-you? [L,R=301]
    

    要为初始请求执行此操作,您需要检查request line

    RewriteCond %{THE_REQUEST} ^GET\ /cansas\.php
    RewriteCond %{QUERY_STRING} ^([^&]*&)*sid=cansas(&.*)?$
    RewriteRule ^cansas\.php$ /cansas-is-good-for-you? [L,R=301]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-08
      • 2015-10-22
      • 1970-01-01
      • 2013-10-02
      相关资源
      最近更新 更多