503 htaccess文件只能部分工作

时间:2015-01-08 01:08:43

标签: linux wordpress .htaccess mod-rewrite

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

1 个答案:

答案 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]标志,它将尝试第二个条件,这是真的。然后它检查第三个条件是否为真,然后重写请求。