2012-09-16 55 views
1

我想重定向如何主機重定向到相應語言版本

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框架。

有什麼想法?

+1

所以,如果你不能爲'使虛擬主機en.example.org'和'de.example.org',當我在瀏覽器的URL地址欄中鍵入這些主機名時,我該去哪裏? –

+0

總是在這裏:「C:/Apache2.2/htdocs/example/public」然後zend框架負責。它將'en','de'作爲名爲'application.ini'的安裝文件中的參數。 – user1592714

+0

我不是專家,所以任何可能的方式是值得歡迎的。 Apache服務器級別或zend框架級別。 – user1592714

回答

1

我不確定zend對請求做了什麼。我假設你的文檔根目錄中有一個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] 
+0

非常感謝。然而這不是我想要的。我假設沒有文件夾「en」。爲了解釋簡短(在你的例子中),我想在$ {REQUEST_URI}之前附加'en',以便C:/Apache2.2/htdocs/example/public/index.php處理'en/blah/blah'而不是在zend中的'/ blah/blah'。 – user1592714