当REQUEST_URI与htaccess apache2不匹配时,RewriteCond

时间:2016-06-15 14:32:45

标签: regex .htaccess redirect apache2 apache2.4

我有一个多语言wordpress网站,并希望将给定区域的网站重定向到给定语言,

xyz.de --> xyz.de/de/ 
xyz.co.uk --> xyz.co.uk/en/

直接访问xyz.de/dexyz.co.uk/en工作正常。所以在wordpress方面没有问题。

现在,我正在尝试更改xyz.dexyz.co.uk的htaccess文件,以便重定向网站。

考虑xyz.co.uk

我想添加一个RewriteCond,这样只要在/en之后没有xyz.co.uk跟踪,它就会自动添加/en

例如xyz.co.uk/<trailing address>会产生xyz.co.uk/en/<trailing address>

到目前为止,我有以下代码,这些代码似乎无法正常工作,

RewriteCond %{REQUEST_URI} !^/en
RewriteRule ^(.*)$ http://xyz.co.uk/en/$1 [L]

/en的否定无效!我也试过

RewriteCond %{REQUEST_URI} !/en
RewriteRule ^(.*)$ http://xyz.co.uk/en/$1 [L]

有人能告诉我哪里出错了吗?好像我在编写RegEx时出错了,并建议是否有更好的方法来实现相同的目标,这不会影响不同领域的搜索引擎优化。

1 个答案:

答案 0 :(得分:1)

使用THE_REQUEST变量代替REQUEST_URI

RewriteCond %{HTTP_HOST} \.co\.uk$ [NC]
RewriteCond %{THE_REQUEST} !/en/ [NC]
RewriteRule ^ /en%{REQUEST_URI} [L,R=302,NE]
  • 请务必将此规则作为.htaccess中的第一条规则。
  • 测试后将其更改为R=301