如何将主机名重定向到适当的语言版本

时间:2012-09-16 16:25:21

标签: apache zend-framework dns virtualhost

我想重定向

http://en.example.org
http://de.example.org

http://example.org/en
http://example.org/de

但不喜欢:

<VirtualHost *:80>
 DocumentRoot "C:/Apache2.2/htdocs/example/public"
 ServerName example.org
</VirtualHost>

<VirtualHost *:80>
 DocumentRoot "C:/Apache2.2/htdocs/example/public/en"
 ServerName en.example.org
</VirtualHost>

<VirtualHost *:80>
 DocumentRoot "C:/Apache2.2/htdocs/example/public/de"
 ServerName de.example.org
</VirtualHost>

因为没有这样的文件夹“C:/Apache2.2/htdocs/example/public/en”或“C:/Apache2.2/htdocs/example/public/de”

我也不能使用:

<VirtualHost *:80>
 DocumentRoot "C:/Apache2.2/htdocs/example/public"
 ServerName example.org
 ServerAlias en.example.org de.example.org
</VirtualHost>

因为我需要在zend框架中重用'en','de'。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我不确定这些请求会有什么用处。我假设你的文档根目录中有一个htaccess文件,其中包含一些zend内容,如果是这样你就会想要在它们之前添加它。

要重定向浏览器,请将其URL地址栏显示为http://example.org/en

RewriteEngine On
RewriteCond %{HTTP_HOST} ^en\.example\.org$ [NC]
RewriteRule ^/?(.*)$ http://example.org/en/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^de\.example\.org$ [NC]
RewriteRule ^/?(.*)$ http://example.org/de/$1 [L,R=301]

如果您只想在内部重写URI,请尝试:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^en\.example\.org$ [NC]
RewriteCond %{REQUEST_URI} !^/en/ 
RewriteRule ^/?(.*)$ /en/$1 [L]
RewriteCond %{HTTP_HOST} ^de\.example\.org$ [NC]
RewriteCond %{REQUEST_URI} !^/de/
RewriteRule ^/?(.*)$ /de/$1 [L]