2015-10-14 28 views
0

我有我的網站有兩個本地化的內容,即EN和FR和內容將通過網址呈現:http://www.example.com/en/http://www.example.com/fr/基於目錄的錯誤頁面的重定向

我想要實現不同的錯誤頁面的每個區域設置的,但我不知道如何通過重定向/虛擬主機配置來實現。

我讀了不同的.htaccess文件爲每個目錄但沒有工作。

幫助會很好。提前致謝。

+0

@anubhava:它們不是實際的物理目錄,而是代理文件系統中的其他文件。 –

+0

也告訴我你的Apache版本? – anubhava

+0

@anubhava Apache 2.2 –

回答

0

具有不同的.htaccess工作得很好,例如,

/-+- en -- .htaccess 
    | 
    +- fr -- .htaccess 

而且在/en/.htaccess,你有

ErrorDocument 404 /path/to/en/error404.html 

/fr/.htaccess

ErrorDocument 404 /path/to/fr/error404.html 

你也可以把錯誤的文件在同一目錄下,並推而廣之區分一樣,例如error404.en.htamlerror404.fr.html。你分別

ErrorDocument 404 /path/to/error404.en.html 

ErrorDocument 404 /path/to/error404.fr.html 

有則。


如果你不想使用.htaccess文件,你可以達到同樣的用DirectoryLocation指令。在主或虛擬主機配置,這看起來就像

<Directory "/path/to/example.com/en"> 
    ErrorDocument 404 /path/to/error404.en.html 
</Directory> 

<Directory "/path/to/example.com/fr"> 
    ErrorDocument 404 /path/to/error404.fr.html 
</Directory> 

<Location>指令類似於。

+0

使用Location指令的最後方法奏效!謝謝@Olaf –

0

在Apache的2.4,你可以使用表達式:

# for /fr/ URIs 
<If "%{REQUEST_URI} =~ m#^/fr/#"> 
    ErrorDocument 404 /fr-404.html 
</If> 

# for /en/ URIs 
<If "%{REQUEST_URI} =~ m#^/en/#"> 
    ErrorDocument 404 /en-404.html 
</If> 

Check Apache 2.4 expression reference

如果你還是堅持了Apache 2.2的,那麼你可以使用:

RewriteEngine On 

# for /fr/ URIs 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^fr/ /fr-404.html [L] 

# for /en/ URIs 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^en/ /en-404.html [L] 

但是請記住,Apache 2.2的解決方案將返回200狀態給客戶。