&安培; URL中的&符号

时间:2013-02-06 17:13:25

标签: .htaccess url url-rewriting

我试图弄清楚如何在网址中使用&符号。

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

在访问网址时,不确定服务器将要调用的内容。

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

谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

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

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

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

在您的示例中,没有?,因此不会启动任何查询字符串。根据{{​​3}},&符号不是有效的URL字符,除了它们的指定目的(将查询字符串中的变量链接在一起),因此您提供的链接在技术上无效。

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

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

此规则会找到以http://www.indeed.co.uk/B&Q-开头的任何网址,而是显示http://www.indeed.co.uk/scripts/b-q.php?variable=jobs的内容。

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

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

答案 1 :(得分:1)

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

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

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