2011-08-01 34 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

我编辑了我的整个答案,以避免任何混乱的东西,将无法正常工作。请重新阅读。 –