【问题标题】:Why is query string repeated in rewrite URL?为什么在重写 URL 中重复查询字符串?
【发布时间】:2013-03-09 01:39:07
【问题描述】:

我有这些重写。第一个(用于画廊)按预期工作。第二个(用于照片)有效,但查询字符串重复。所以转发到:http://www.domain.com/photo-TheID?id=TheID

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /gallery\.php\?set=([^/]*)\ HTTP/
RewriteRule ^gallery\.php$ http://www.domain.com/gallery?set=%1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /photo\.php\?id=([^/]*)\ HTTP/
RewriteRule ^photo\.php$ http://www.domain.com/photo-%1 [R=301,L]

但是,如果我添加 ?到重写的结尾

RewriteRule ^photo\.php$ http://www.domain.com/photo-%1? [R=301,L]

然后按预期转发到:http://www.domain.com/photo-TheID

我的问题是为什么在没有“?”的情况下重复该查询字符串在末尾?我很困惑,因为第一次重写(对于画廊)没有?但它不会重复查询字符串。如果我添加 ?在画廊重写的末尾,它将“%3f”添加到 url 的末尾。

【问题讨论】:

    标签: .htaccess rewrite query-string


    【解决方案1】:

    因为除非您在替换 URL 中放置尾随问号,否则它会自动附加,前提是它不包含新的查询字符串。

    当你想删除一个现有的查询字符串时,只用一个问号结束替换字符串”。

    查看此 Apache 链接中的标题 Modifying the Query String

    你的问题:

    我很困惑,因为第一次重写(用于画廊)没有 ?

    原因是第一条重写规则:

    RewriteRule ^gallery\.php$ http://www.domain.com/gallery?set=%1 
    

    创建一个新的查询字符串,在这种情况下,传入的查询字符串不会自动附加,除非您使用 QSA 标志明确执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-02
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2012-06-16
      • 2015-03-14
      相关资源
      最近更新 更多