Apache htaccess重定向所有404(文件和文件夹)

时间:2017-05-04 14:08:18

标签: apache .htaccess mod-rewrite http-status-code-404

我想将所有“404”错误重定向到PHP文件。我使用Wordpress的.htaccess作为初始步骤。工作,但不是当路径是文件夹时,意味着,结尾有一个“/”,我得到一个禁止错误。

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /includes/redir.php [L]

如果我尝试:

http://example.com/anything

按预期工作,重定向到我的redir.php。但如果我尝试:

http://example.com/anything/

返回Forbidden错误。

我需要做些什么来重定向到redir.php所有不存在的东西? 我需要更改httpd.conf吗?我需要一个“ErrorDocument 404 /includes/redir.php”行吗?

1 个答案:

答案 0 :(得分:1)

  

我需要一个“ErrorDocument 404 /includes/redir.php”行?

是的,使用这样的ErrorDocument指令比尝试手动重定向/重写错误文档更为可取。

定义的ErrorDocument将返回正确的HTTP状态代码(无需您手动执行此操作)。 PHP将在$_SERVER超全局中设置与此错误相关的其他变量。

如果您特别想在404上重写文件,那么您可以执行以下操作:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /includes/redir.php [L]
  

但不是当路径是文件夹时,意味着最后有一个“/”,我得到一个Forbidden错误。

除非URL映射到磁盘上的物理文件夹,否则URL“看起来”就像文件夹一样无关紧要。只有这样,如果没有目录索引文档,你会得到403 Forbidden。