在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]
答案 0 :(得分:2)
任何以/
结尾的网址都会请求一个文件夹,而任何未在/
上结束的网址都会请求一个文件。当您请求http://example.com
时,实际上请求http://example.com/
example.com
的文档根目录。您的文档根目录显然是现有文件夹,否则您根本无法运行网站。
您使用以下规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /rdi/index.php [R=503,L]
第二个条件是:"如果请求的文件名不是目录"。您的文档根是目录,因此条件为false。它不会被重写。
您可以使用以下规则:
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/
,则第一个条件将为false,第二个条件将为false,因此不会使用该规则。如果您请求http://example.com/asdfasdf/
,则第一个条件将为false,但由于[OR]
标志,它将尝试第二个条件,这是真的。然后它检查第三个条件是否为真,然后重写请求。