当 REQUEST_URI 与 htaccess apache2 不匹配时 RewriteCond

Posted

技术标签:

【中文标题】当 REQUEST_URI 与 htaccess apache2 不匹配时 RewriteCond【英文标题】:RewriteCond when REQUEST_URI do not match htaccess apache2 【发布时间】:2016-10-16 17:51:13 【问题描述】:

我有一个多语言 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,这样只要xyz.co.uk 后面没有/en,它就会自动添加/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 时出错了,并建议是否有更好的方法来实现相同的目标,这不会影响跨不同域的 SEO。

【问题讨论】:

【参考方案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

【讨论】:

以上是关于当 REQUEST_URI 与 htaccess apache2 不匹配时 RewriteCond的主要内容,如果未能解决你的问题,请参考以下文章

Apache htaccess:如果 REQUEST_URI 与 cookie 值不匹配,则拒绝

htaccess代码段

.htaccess:使用参数重写 url 不起作用

htaccess维护重定向与IP和文件夹省略

.htaccess从modu rewrite中排除目录

htaccess从Rewrite中排除URL