503 htaccess 文件只能部分工作

503 htaccess file only partially working

在 wordpress 网站上使用以下作为 503 转发器。由于某种原因,它表示 foo.com/xyz,而不是 foo.com 本身。有什么想法吗?

.htaccess 文件:

ErrorDocument 503 /rdi/index.php

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /rdi/index.php [R=503,L]

任何以 / 结尾的 url 请求一个文件夹,任何不以 / 结尾的 url 请求一个文件。当你请求 http://example.com 时,你实际上请求的是 http://example.com/example.com 的文档根目录。您的文档根目录显然是一个现有文件夹,否则您根本无法 运行 一个站点。

您正在使用以下规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /rdi/index.php [R=503,L]

第二个条件是:"If the requested filename is not a directory"。您的文档根目录 一个目录,因此该条件为假。它不会重写。

您可以使用以下规则:

RewriteCond %{REQUEST_URI} ^/$ [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /rdi/index.php [R=503,L]

这会做什么?如果请求 http://example.com,第一个条件将匹配,第二个将被忽略,因为 [OR] 标志,第三个条件将为真。如果您请求 http://example.com/rdi/,第一个条件将为假,第二个条件将为假,因此不会使用该规则。如果您请求 http://example.com/asdfasdf/,第一个条件将为假,但由于 [OR] 标志,它将尝试第二个条件,即为真。然后它检查第三个条件是否为真,然后将重写请求。