如何在 Apache Web 服务器中添加重定向 URL 的重写规则

如何在 Apache Web 服务器中添加重定向 URL 的重写规则

我正在尝试为我的邮件服务器配置 Outlook 和 Thunderbird 的自动发现功能。

我添加了一个虚拟主机条目,其中包含以下内容,用于RewriteRule重定向config-v1.1.xmlthunderbird.php和。autodiscover.xmloutlook.php

NameVirtualHost 192.168.0.153:80
<VirtualHost 192.168.0.153:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/webroot
    ServerName autconfig.test.int
    RewriteEngine On
    RewriteRule ^/mail/config-v1\.1\.xml$ thunderbird.php [NC,L]
    RewriteRule ^/autodiscover/autodiscover\.xml outlook.php [NC,L]
</VirtualHost>`

我收到 404 未找到错误,谁能告诉我这是什么错误?我没有创建任何.htaccess文件。

答案1

您必须在<Directory>如下子句中定义重定向:

<VirtualHost 192.168.0.153:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/webroot
    ServerName autconfig.test.int

    <Directory "/var/www/webroot">
         Allow from All
         AllowOverride all
         RewriteEngine On
         RewriteRule ^/mail/config-v1\.1\.xml$ thunderbird.php [NC,L]
         RewriteRule ^/autodiscover/autodiscover\.xml outlook.php [NC,L]
    </Directory>
</VirtualHost>

答案2

RewriteRule ^/mail/config-v1\.1\.xml$ thunderbird.php [NC,L]
RewriteRule ^/autodiscover/autodiscover\.xml outlook.php [NC,L]

您不能指定相对的发出内部重写。它不被视为相对于 DocumentRoot(或 ServerRoot)。Apache 文档简单声明这是“无效,不支持”。在我的测试服务器上,这实际上会导致 400 错误请求(而不是 404 未找到) - 虽然这无疑取决于服务器配置。

在服务器上下文中,您需要指定绝对文件系统路径或文档根目录相对(以斜杠开头)的 URL 路径。例如:

RewriteRule ^/mail/config-v1\.1\.xml$ /thunderbird.php [NC,L]
RewriteRule ^/autodiscover/autodiscover\.xml /outlook.php [NC,L]

相关内容