【问题标题】:How to add additional URL variables to a URL already rewritten with mod_rewrite如何将额外的 URL 变量添加到已经用 mod_rewrite 重写的 URL
【发布时间】:2011-11-09 21:12:57
【问题描述】:

有没有人知道是否可以将其他变量放入您使用 mod_rewrite 基本上分割成变量的 URL 中。

例如,如果我有 URL:

website.com/post/53/post-title/

我正在使用 mod_rewrite 把它变成:

website.com/post.php?postid=53

是否有优雅的方式将其他变量放入“预先重写”的 URL 并将它们保留在我的 post.php 脚本中?

IE,如果我创建如下链接会怎样:

website.com/post/53/post-title/?anothervar=6

到目前为止,我的 mod_rewrite 代码似乎只是丢弃了附加变量并将 URL 发送到 post.php 脚本,如下所示:

website.com/post.php?postid=53

我知道我可以使用 $_SERVER['REQUEST_URI'] 在我的 php 脚本 (AKA website.com/post/53/post-title/?anothervar=6) 中获取原始 URL,然后它被 mod_rewrite 重写,然后将字符串切碎以将其添加到变量中,但我只是想知道是否有更优雅的解决方案只使用 mod_rewrite。

【问题讨论】:

    标签: .htaccess mod-rewrite get


    【解决方案1】:

    http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule

    “qsappend|QSA”

    使用 QSA 使 mod_rewrite 在重写时正确“合并”附加参数。

    RewriteRule /pages/(.+) /page.php?page=$1 [QSA] 
    

    这将为用户提出的任何请求添加“page=$1”。

    附言。虽然要小心,因为如果用户指定了 mod_rewrite ,它会很高兴地覆盖“页面”。没有办法,我知道。

    【讨论】:

    • [QSA] 为我解决了这个问题。如果您访问它的西班牙语链接 (example.com/spanish/pagina),我有一个页面 (example.com/page) 会被翻译成西班牙语,该链接被重写为 example.com/page?language=spanish。我试图向 /spanish/pagina 附加一个额外的 GET 变量,该变量将通过 ajax 发送并不断获取 HTML 网页(ajax 调用同一页面但只执行一个 php 脚本来发送 json 数据而不是生成html内容)。任何做这种事情的人现在都应该警惕使用 QSA
    【解决方案2】:

    您还可以使用 %{QUERY_STRING} 将原始查询字符串传递给新 url。或根据需要使用它,例如

    RewriteRule /pages/(.*) /page.php?page=$1&%{QUERY_STRING} [R]
    

    【讨论】:

    • 谢谢,解决了。重写规则末尾的 [R] 是什么?我的任何重写规则行的末尾都没有。
    • 谢谢,我添加此评论是因为我忘记在上面的评论中通知您:重写规则末尾的 [R] 是什么?我的任何重写规则行的末尾都没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 2010-11-30
    相关资源
    最近更新 更多