.htaccess:正则表达式将人们重定向到正确的语言子目录

时间:2011-12-19 12:26:49

标签: regex .htaccess mod-rewrite

我正在尝试设置一个重定向,将人们发送到正确的语言子目录(在wordpress安装上,但这与我认为不相关):

如果来自example.com或example.eu域(example.com/cur / ...)没有任何语言子目录(/ en或/ de),我想将它们发送到example.com/cur / EN /...

如果他们来自example.de域,并且他们在url中没有任何语言子目录,我想将它们发送到example.de/cur/de /...

我的.htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase /cur/

RewriteRule ^http://(www\.)?example\.(eu|com)/cur((?!/en|/de).)*$ http://$1example.$2/cur/en$4 [R=301,L]
RewriteRule ^http://(www\.)?example\.(de)/cur((?!/en|/de).)*$ http://$1example.$2/cur/de$4 [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /cur/index.php [L]
</IfModule>

你能看到我遗失的东西吗?

2 个答案:

答案 0 :(得分:0)

你应该使用mod_rewrite的%{HTTP_HOSTNAME}

RewriteCond %{HTTP_HOSTNAME} ^example\.de$
RewriteRule /(.*) http://example.com/cur/de/$1 [R]

等等。

但我不明白为什么你使用.htaccess。对于VirtualHost ServerAllias个条目来说,它确实是一项工作,并使用相同的原则将重写规则放在该vhost中。

答案 1 :(得分:0)

试试这个:

RewriteEngine On

RewriteCond %{HTTP_HOST} example\.(com|eu)$
RewriteCond %{REQUEST_URI} !^(/cur)?/(en|de)/
RewriteRule ^(.*)$ /cur/en/$1 [R=301,L]

RewriteCond %{HTTP_HOST} example\.de$
RewriteCond %{REQUEST_URI} !^(/cur)?/(en|de)/
RewriteRule ^(.*)$ /cur/de/$1 [R=301,L]