我有一组网址www.website.co.uk/businessname
这些用于执行htaccess代理重定向以从服务器上的另一个域提取数据。
这就是我所拥有的:
#Start Business pages
RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^www.outputside.org.uk/swellcottage$
RewriteRule ^(.*) http://www.datasite.co.uk/$1 [P]
RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^www.outputsite.org.uk/hawthorn-books$
RewriteRule ^(.*) http://www.datasite.co.uk/$1 [P]
#End Business Pages
第一条规则运作正常,在网址http://www.datasite.co.uk/swellcottage
上显示www.outputsite.org.uk/swellcottage
的内容,但第二条规则/条件不起作用。
我查看了将URL中的-
字符转义为:
RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^www.outputsite.org.uk/hawthorn\-books$
RewriteRule ^(.*) http://www.datasite.co.uk/$1 [P]
#End Business Pages
但是这似乎仍然无法正确使用,重写规则不起作用,并且网站使用回退404回复页面www.outputsite.org.uk/hawthorn-books
不存在。
除此之外我还应该如何摆脱破折号或者我的语法错在哪里?欢呼声
PS。我知道文件名(index.php)和文件夹名称(/ places /)不受代理重定向的约束。
我的htaccess中有更多规则:
#to add www. to each request.
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301]
#Start biz pages
...
#End biz Pages
#to prevent error looping
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
我还使用hawthornbooks
运行上面相同的代码而不使用短划线,转义或其他方式并且代码正常工作,因此我需要找出正确的方法来转义短划线字符。所有代码和工作都是UTF-8。
注意:此问题与Why if I put a "-" dash in a rule in my htaccess doesn't work?类似,但我找不到解决该问题的方法。
答案 0 :(得分:1)
如果问题只是一个连字符,这应该有效:
#Start Business pages
RewriteCond %{HTTP_HOST} ^(www\.)?outputside\.org\.uk$ [NC]
RewriteRule ^(swellcottage)/?$ http://www.datasite.co.uk/$1 [P,NC]
RewriteCond %{HTTP_HOST} ^(www\.)?outputside\.org\.uk$ [NC]
RewriteRule ^(hawthorn.books)/?$ http://www.datasite.co.uk/$1 [P,NC]
#End Business Pages
答案 1 :(得分:0)
这是一个临时解决方案,而不是永久解决方案,但您可以尝试以下规则:
RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^www.outputsite.org.uk/hawthorn([^\/]*)\/?$
RewriteRule ^(.*) http://www.datasite.co.uk/$1 [P]
这将查找符合模式www.outputsite.org.uk/hawthorn
的任何URI,后跟任意数量的字符(或零字符)不是 /
然后以(可选)/
结尾。