【问题标题】:htaccess and ampersand in the URLURL 中的 htaccess 和 & 符号
【发布时间】:2013-03-04 08:15:52
【问题描述】:

我有一个表格,其中每一行代表一个页面。 title 列包含页面名称。加载页面时,原始 url 如下所示:www.mysite.com/?q=france,然后我进行快速 DB 查找 WHERE title = 'france' 就是这样。我现在使用 htaccess 使 url 更友好。像这样:RewriteRule ^([a-zA-Z0-9#%@\s\(\)\[\]\-]+)$ page.php?q=$1,所以我可以使用www.mysite.com/france。我遇到的问题是标题有一个&符号,比如“一和二”。查找失败。我试过了

  1. \& 添加到htaccess,然后
  2. www.mysite.com/一 %26 二

这两个都失败了,尽管www.mysite.com/?q=one %26 two 确实有效。

有什么方法可以让我使用“干净”的网址吗?

TIA!

【问题讨论】:

  • 虽然我得到了答案,但我很好奇为什么这个问题被认为是题外话。我查看了下面链接的常见问题解答,问题似乎在范围内。如果有人能告诉我问题出在哪里,我很乐意改写它......
  • 我看不出这怎么可能是题外话......
  • @WouterJ 让你的朋友知道 :-)
  • @Phil 我已将其标记为“重新打开”,但我看到其他人将其标记为已关闭... (stackoverflow.com/review/reopen/1642839) 您可以在 meta.stackoverflow.com 上创建一个问题以查看'铁杆 SO 成员和模组' 想一想。

标签: regex .htaccess url url-rewriting


【解决方案1】:

两件事:

  1. URI 在通过 mod_rewrite 之前被解码,所以你不想匹配 %26,你只想匹配 &
  2. 您现在需要将&重新编码%26,因为它被放置在查询字符串中,因此您需要使用B 标志。所以是这样的:

    # Add a "&"----------------v
    RewriteRule ^([a-zA-Z0-9#%@&\s\(\)\[\]\-]+)$ page.php?q=$1 [L,B]
    #                     Include the "B" flag -------------------^
    

【讨论】:

    猜你喜欢
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多