Apache ErrorDocument绝对路径

Apache ErrorDocument绝对路径,apache,http,mod-rewrite,error-handling,mod-alias,Apache,Http,Mod Rewrite,Error Handling,Mod Alias,我试图对一个域及其所有子域使用相同的404 ErrorDocument, 这些子域在/var/www/path中都有自己的目录 apacheerrordocument指令需要一个相对路径(相对于当前目录),但我希望它是相对路径 从所有目录/子域转到/var/www/ErrorPages/404.html 2010年有一个类似的问题被问到,但它并没有在解决方案中体现出来,我尝试了Alias,但无法让它实现我想要的功能 例1: 文件http://example.com/doesnotexist.tx

我试图对一个域及其所有子域使用相同的404 ErrorDocument, 这些子域在/var/www/path中都有自己的目录

apacheerrordocument指令需要一个相对路径(相对于当前目录),但我希望它是相对路径 从所有目录/子域转到/var/www/ErrorPages/404.html

2010年有一个类似的问题被问到,但它并没有在解决方案中体现出来,我尝试了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>

服务器名www.mervinkoops.net
ServerAlias mervinkoops.net*.mervinkoops.net spirecoder.com www.spirecoder.com*.spirecoder.com
DocumentRoot/var/www/mervin
ErrorDocument 404/ErrorDocuments/404.html
重定向404/favicon.ico
重新启动发动机
重写cond%{HTTP_HOST}public\.mervinkoops\.net[NC]
重写规则^(.*)$/public/$1[L]
重写cond%{HTTP_HOST}pma\.mervinkoops\.net[NC]
重写规则^(.*)$/PHPMyAdmin/$1[L]
重写cond%{HTTP_HOST}www\.mervinkoops\.net[NC]
重写规则^(.*)$/网站/$1[L]
重写cond%{HTTP_HOST}mervinkoops\.net[NC]
重写规则^(.*)$/网站/$1[L]
重写cond%{HTTP_HOST}www\.spirecoder\.com[NC]
重写规则^(.*)$/网站/$1[L]
重写cond%{HTTP_HOST}spirecoder\.com[NC]
重写规则^(.*)$/网站/$1[L]
通融
选项-索引
重写基/
我该怎么做呢


其他信息:Apache2.2,MOD_别名工作,MOD_重写工作,启用符号链接

我在我的一个开发框上设置了一个测试配置-我注意到您的错误文档缺少一个目录声明

这适用于我的设置:

<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>

ServerName stackexchange.nexus.local
ServerAlias serverfault.nexus.local
DocumentRoot/Data/vhome/stackexchange.nexus.local/httpdocs
主机名查询
UseCononicalName关闭
服务器签名
ErrorLog/var/log/apache2/error\u log
CustomLog/var/log/apache2/access\u log组合
别名“/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
允许超越所有
选项+执行CGI-包括
命令允许,拒绝
通融
重写基/
允许超越所有
选项+执行CGI-包括
命令允许,拒绝
通融
#重新启动发动机
#重写cond%{HTTP_HOST}public\.mervinkoops\.net[NC]
#重写规则^(.*)$/public/$1[L]
#重写cond%{HTTP_HOST}pma\.mervinkoops\.net[NC]
#重写规则^(.*)$/PHPMyAdmin/$1[L]
#重写cond%{HTTP_HOST}www\.mervinkoops\.net[NC]
#重写规则^(.*)$/网站/$1[L]
#重写cond%{HTTP_HOST}mervinkoops\.net[NC]
#重写规则^(.*)$/网站/$1[L]
#重写cond%{HTTP_HOST}www\.spirecoder\.com[NC]
#重写规则^(.*)$/网站/$1[L]
#重写cond%{HTTP_HOST}spirecoder\.com[NC]
#重写规则^(.*)$/网站/$1[L]
让你的别名/ErrorDocs为你的主域名工作,然后如果别名仍然有问题,我们可以解决这个问题[尽管我感觉一旦你添加了目录,一切都会就绪!;)]


-sean

您的示例似乎不起作用,apache日志只给出了一个错误\u docs not exists错误。我只需要一个Vhost,它有两个子域,可以直接重写到/var/www/I下的目录。我确实希望域/子域位于1指令中,我已将我的定义添加到我的帖子中。我编辑了我的整个答案,以避免与不起作用的内容混淆。请重新阅读。我尝试了您的VHost建议,我得到了404(它仍然搜索相对路径“currentdirectory”/ErrorDocuments/而不是/var/www/mervin/ErrorDocuments/您是如何验证mod_alias是否正常工作的?——对我来说,现在很可疑。