1

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

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

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

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

谢谢你的帮助!

4

2 回答 2

2

与号通常用于查询字符串。查询字符串是 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]

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

有关 Apache 重写规则的更多信息,请查看其官方文档

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

于 2013-02-06T22:21:02.173 回答
1

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

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

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

于 2013-02-06T22:08:32.137 回答