2011-08-01 33 views
3

我試圖使用相同的404的ErrorDocument某個域及其所有子域, 的子域都在/ var /網絡/路徑的Apache的ErrorDocument絕對路徑

Apache的ErrorDocument指令希望自己的目錄相對路徑(相對於當前目錄),但我希望它 去/var/www/ErrorPages/404.html從所有目錄/子域

有在2010年提出過類似的問題here,但它不在解決方案上進行點評,我已經嘗試過Alias,無法讓它做我想做的事情。

實施例1: 文件http://example.com/doesnotexist.txt請求

- >顯示/var/www/mervin/ErrorDocuments/404.html作爲響應

實施例2: 文件http://subdomain.example.com/otherimaginaryfile.txt請求

- >顯示/var/www/ErrorPages/404.html作爲響應

虛擬主機:

<VirtualHost *:80> 
ServerName www.mervinkoops.net 
ServerAlias mervinkoops.net *.mervinkoops.net spirecoder.com www.spirecoder.com *.spirecoder.com 
DocumentRoot /var/www/mervin 
ErrorDocument 404 /ErrorDocuments/404.html 
Redirect 404 /favicon.ico 
RewriteEngine On 
RewriteCond %{HTTP_HOST} public\.mervinkoops\.net [NC] 
RewriteRule ^(.*)$ /public/$1 [L] 
RewriteCond %{HTTP_HOST} pma\.mervinkoops\.net [NC] 
RewriteRule ^(.*)$ /PHPMyAdmin/$1 [L] 
RewriteCond %{HTTP_HOST} www\.mervinkoops\.net [NC] 
RewriteRule ^(.*)$ /website/$1 [L] 
RewriteCond %{HTTP_HOST} mervinkoops\.net [NC] 
RewriteRule ^(.*)$ /website/$1 [L] 
RewriteCond %{HTTP_HOST} www\.spirecoder\.com [NC] 
RewriteRule ^(.*)$ /website/$1 [L] 
RewriteCond %{HTTP_HOST} spirecoder\.com [NC] 
RewriteRule ^(.*)$ /website/$1 [L] 
<Directory /var/www/mervin/> 
allow from all 
Options -Indexes 
RewriteBase/
</Directory> 
</VirtualHost> 

我該怎麼做呢?

其他信息:APACHE2.2,mod_alias中工作,工作的mod_rewrite,符號鏈接啓用

回答

8

我設置上的我的dev的箱子一個一個測試配置 - 我注意到從你缺少的主要事情是一個目錄的申報錯誤文檔!

這適用於我的設置:

<VirtualHost *:80> 

     ServerName stackexchange.nexus.local 
     ServerAlias serverfault.nexus.local 

     DocumentRoot /Data/vhome/stackexchange.nexus.local/httpdocs 

     HostnameLookups Off 
     UseCanonicalName Off 
     ServerSignature On 

     ErrorLog /var/log/apache2/error_log 
     CustomLog /var/log/apache2/access_log combined 


     Alias "/ErrorPages" "/Data/vhome/stackexchange.nexus.local/ErrorPages/" 
     ErrorDocument 400 /ErrorPages/bad_request.html 
     ErrorDocument 401 /ErrorPages/bad_request.html 
     ErrorDocument 403 /ErrorPages/bad_request.html 
     ErrorDocument 404 /ErrorPages/bad_request.html 


     <Directory /Data/vhome/stackexchange.nexus.local/httpdocs/> 
       AllowOverride All 
       Options +ExecCGI -Includes 
       Order allow,deny 
       Allow from all 
       RewriteBase/
     </Directory> 


     <Directory /Data/vhome/stackexchange.nexus.local/ErrorPages/> 
       AllowOverride All 
       Options +ExecCGI -Includes 
       Order allow,deny 
       Allow from all 
     </Directory> 

     #RewriteEngine On 
     #RewriteCond %{HTTP_HOST} public\.mervinkoops\.net [NC] 
     #RewriteRule ^(.*)$ /public/$1 [L] 
     #RewriteCond %{HTTP_HOST} pma\.mervinkoops\.net [NC] 
     #RewriteRule ^(.*)$ /PHPMyAdmin/$1 [L] 
     #RewriteCond %{HTTP_HOST} www\.mervinkoops\.net [NC] 
     #RewriteRule ^(.*)$ /website/$1 [L] 
     #RewriteCond %{HTTP_HOST} mervinkoops\.net [NC] 
     #RewriteRule ^(.*)$ /website/$1 [L] 
     #RewriteCond %{HTTP_HOST} www\.spirecoder\.com [NC] 
     #RewriteRule ^(.*)$ /website/$1 [L] 
     #RewriteCond %{HTTP_HOST} spirecoder\.com [NC] 
     #RewriteRule ^(.*)$ /website/$1 [L] 


</VirtualHost> 

讓您的別名/頁面errordocs東西合作,爲您的主域名,那麼如果還有用別名麻煩,我們可以在有效的[雖然我有一種感覺一旦你添加目錄 - 一切都將落到位! ;)]

-Sean

+0

您的例子似乎不工作Apache日誌只是給出了一個上-error_docs‖不存在錯誤。我只需要一個Vhost,它有兩個子域,可以直接在/ var/www/ – Mervin

+0

下重寫目錄,我希望這些域/子域位於1 指令中, 我已經將我的定義添加到我的帖子。 – Mervin

+0

我編輯了我的整個答案,以避免任何混亂的東西,將無法正常工作。請重新閱讀。 –