apache / .htaccess:错误的页面无法重定向到自定义404

时间:2018-08-03 15:20:07

标签: php apache .htaccess http-status-code-404

我遇到一个奇怪的错误,我的.htaccess中的ErrorDocument 404在所有情况下均无法正常工作。

如果我访问不存在的页面,我只会收到消息File not found.

如果是的话,我添加了.html扩展名,它显示了我创建的自定义404页面。

https://website.com/not-found

此链接无效,我只收到消息File not found.

https://website.com/not-found.html

访问此链接后,我看到了自定义404页面。

这是我的.htaccess文件

<IfModule mod_rewrite.c>

    Options +FollowSymLinks -MultiViews
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^\.]+?)/?$ $1.php [NC,L]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
    RewriteRule ^(.+)\.php$ /$1 [R=301,L]

    ErrorDocument 404 /app/templates/errors/404.php
    ErrorDocument 403 /app/templates/errors/403.php

    # Block access to hidden files and directories.
    RewriteCond %{SCRIPT_FILENAME} -d [OR]
    RewriteCond %{SCRIPT_FILENAME} -f
    RewriteRule "(^|/)\." - [F]

</IfModule>

基本上,我剥离扩展名,仅此而已。在其他网站上,此代码行之有效,可能是托管公司遇到的问题吗? 请注意,我无权访问apache配置文件

谢谢

1 个答案:

答案 0 :(得分:1)

像这样更改您的第一个以检查是否存在.php文件:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+?)/?$ $1.php [L]

在没有RewriteCond %{REQUEST_FILENAME}.php -f的情况下,它将重写每个非文件和非目录。