【问题标题】:Apache "File not found." instead of 404. error documentApache“找不到文件。”而不是 404. 错误文档
【发布时间】:2018-02-04 14:34:47
【问题描述】:

我想设置一个自定义的404错误文档,但是遇到了问题!

首先,我的 .htaccess 中有两个 RewriteRules:

RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)/?$ /$2/$3.php?lang=$1 [L]
RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)/([^/.]+)/?$ /$2/$3/$4.php?lang=$1 [L]

所以我的 URL 看起来像:/de-de/page/other/stuff 并打开 /page/other/stuff.php?lang=de-de

现在是时候设置我自己的错误文档了: 错误文档 404 /404.php

如果“/de-de/page/other/”中有错误,例如“/de-de/wrong/page/”,我成功得到错误文档。但是如果 php 文件名有错误(例如“wrong-stuff”而不是“stuff”),我只会收到“找不到文件”的消息。但不是我的错误文档。

怎么了?我能做些什么来解决它?

感谢您的帮助!

AuthType Basic
AuthName "Password Protected Area"
AuthUserFile /var/www/vhosts/<domain>/development/tests/demo.<domain>/.htpasswd
Require valid-user

<IfModule mod_rewrite.c>
    RewriteEngine on        
    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,QSA]
</IfModule>



RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)/?$ /$2/$3.php?lang=$1 [L]
RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)/([^/.]+)/?$ /$2/$3/$4.php?lang=$1 [L]

ErrorDocument 404 /404.php 

Apache 错误日志:

[404] GET /de-de/support/support/fdfssdf HTTP/1.0
AH01071: Got error 'Primary script unknown\n'

【问题讨论】:

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


    【解决方案1】:

    使用RewriteCond检查php文件是否存在:

    RewriteCond %{REQUEST_URI} ^/([^/.]+)/([^/.]+)/([^/.]+)/?$
    RewriteCond %{DOCUMENT_ROOT}/%2/%3.php -f
    RewriteRule ^ /%2/%3.php?lang=%1 [L]
    
    RewriteCond %{REQUEST_URI} ^/([^/.]+)/([^/.]+)/([^/.]+)/([^/.]+)/?$
    RewriteCond %{DOCUMENT_ROOT}/%2/%3/%4.php -f
    RewriteRule ^ /%2/%3/%4.php?lang=%1 [L]
    

    【讨论】:

      猜你喜欢
      • 2020-05-07
      • 2010-11-04
      • 2018-12-06
      • 2023-03-03
      • 2018-01-24
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      相关资源
      最近更新 更多