当我关闭重写代码时,404应该正确地送到了Google(仅用于测试)。当它打开时,它将首先运行重写,并且完全忽略ErrorDocument声明。我不明白为什么要这么做。

Options +FollowSymlinks
ErrorDocument 404 http://www.google.com
<IfModule mod_rewrite.c>
RewriteEngine Off
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

最佳答案

好吧,下面.htaccess中的内容是

RewriteCond %{REQUEST_FILENAME} !-f     # if not a file
RewriteCond %{REQUEST_FILENAME} !-d     # if not a directory
RewriteRule . /index.php [L]            # redirect to index.php

因此,请删除这些规则或关闭重写引擎。

编辑:
永久链接通过捕获404(s)来工作,因为链接结构实际上不存在。 ErrorDocument不会覆盖它,因为如果mod_rewrite决定忽略404,它仍然可以用作备用。例如,
RewriteCond %{REQUEST_FILENAME} !-f     # if not a file
RewriteCond %{REQUEST_FILENAME} !-d     # if not a directory
RewriteCond %{REQUEST_URI} ^/wordpress/ # & points to wordpress
RewriteRule . /index.php [L]            # redirect to index.php

现在,domain.com/wordpress/no-such-file.php将重定向到/index.php,而domain.com/no-such-file.php会将您重定向到Google(因为ErrorDocument)。

关于apache - 在Htaccess中在Mod_rewrite之前运行ErrorDocument,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17663773/

10-11 01:25