我试图弄清楚如何在网址中使用&符号。
在这里看到它:http://www.indeed.co.uk/B&Q-jobs我希望做类似的事情。
在访问网址时,不确定服务器将要调用的内容。
有没有办法用.htaccess抓取这样的请求并重写到特定文件?
谢谢你的帮助!
答案 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
处获得内容。