代码之家  ›  专栏  ›  技术社区  ›  C. Ovidiu

apache/.htaccess:不正确的页面不会重定向到自定义404

  •  1
  • C. Ovidiu  · 技术社区  · 7 年前

    我有个奇怪的错误 ErrorDocument 404 在所有情况下,htaccess都不能正常工作。

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

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

    https://website.com/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 回复  |  直到 7 年前
        1
  •  1
  •   anubhava    7 年前

    改变你的第一个这样来检查是否存在 .php 文件:

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

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