htaccess在重定向URL中与(转义的)破折号断开

时间:2015-03-02 16:28:36

标签: .htaccess url mod-rewrite

我有一组网址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?类似,但我找不到解决该问题的方法。

2 个答案:

答案 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,后跟任意数量的字符(或零字符)不是 /然后以(可选)/结尾。