【问题标题】:& Ampersand in URLURL 中的 & 和号
【发布时间】:2013-02-06 17:13:24
【问题描述】:

我想弄清楚如何在 url 中使用 & 符号。

在这里看到它:http://www.indeed.co.uk/B&Q-jobs 我想做类似的事情。

不完全确定访问 url 时服务器将调用什么。

有没有办法使用 .htaccess 获取这样的请求并重写到特定文件?

感谢您的帮助!

【问题讨论】:

标签: .htaccess url url-rewriting


【解决方案1】:

& 符号常用于查询字符串。查询字符串是 URL 末尾的一个或多个变量,页面用于呈现内容、跟踪信息等。查询字符串通常如下所示:

http://www.website.com/index.php?variable=1&variable=2

请注意 URL 中文件扩展名之后的第一个特殊字符是 ?。这指定了查询字符串的开始。

在您的示例中,没有?,因此没有启动查询字符串。根据RFC 1738 的说法,和号不是有效的 URL 字符,除非用于指定用途(将查询字符串中的变量链接在一起),因此您提供的链接在技术上是无效的。

解决这种无效性的方法以及可能发生的情况是重写。重写通知服务器根据模式或匹配显示特定文件。例如,可能适用于您的示例的 .htaccess 重写规则可能是:

RewriteEngine on
RewriteRule ^/?B&Q-(.*)$ /scripts/b-q.php?variable=$1 [NC,L]

此规则将查找以 http://www.indeed.co.uk/B&Q- 开头的任何 URL,并改为显示 http://www.indeed.co.uk/scripts/b-q.php?variable=jobs 的内容。

有关 Apache 重写规则的更多信息,请查看他们的 official documentation

最后,我建议不要在 URL 中使用与号,即使在进行重写时也是如此,除非它们是查询字符串的一部分。 URL 中的 & 符号的目的是在查询字符串中将变量串在一起。出于该目的使用它是不正确的,将来可能会引起混乱。

【讨论】:

    【解决方案2】:

    /B&Q-jobs 这样的 URI 被发送到编码如下的服务器:/B%26Q-jobs。但是,当它通过重写引擎发送时,URI 已经被解码,因此您希望实际匹配 & 字符:

    Rewrite ^/?B&Q-jobs$ /a/specific/file.html [L]
    

    这使得当有人请求/B&Q-jobs 时,他们实际上会在/a/specific/file.html 获得内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 2014-06-29
      • 2014-05-27
      • 2013-07-26
      相关资源
      最近更新 更多