Php 500而不是404,500自身抛出500

Php 500而不是404,500自身抛出500,php,regex,apache,.htaccess,mod-rewrite,Php,Regex,Apache,.htaccess,Mod Rewrite,我在一个子文件夹中有一个站点,其中有一个.htaccess文件,它运行得很好,但是如果规则没有找到任何东西,它会引发500个内部服务器错误,istead为404,但是我想我可以通过添加一个500个错误文档来解决它, 但是500错误页面(除了经典的500信息)说: “此外,在运行时遇到500内部服务器错误 正在尝试使用ErrorDocument来处理请求。“ 所以我有两个问题: 为什么筹集的是500而不是404 在处理500错误文档时,是什么导致了“附加”错误 这是迄今为止我的.htaccess:

我在一个子文件夹中有一个站点,其中有一个.htaccess文件,它运行得很好,但是如果规则没有找到任何东西,它会引发500个内部服务器错误,istead为404,但是我想我可以通过添加一个500个错误文档来解决它, 但是500错误页面(除了经典的500信息)说:

“此外,在运行时遇到500内部服务器错误 正在尝试使用ErrorDocument来处理请求。“

所以我有两个问题:

  • 为什么筹集的是500而不是404
  • 在处理500错误文档时,是什么导致了“附加”错误
  • 这是迄今为止我的.htaccess:

    试试这些规则:

    DirectorySlash On
    
    RewriteEngine On
    RewriteBase /mysubdir/
    
    ErrorDocument 404 /mysubdir/404.php
    
    RewriteRule ^(folderexcludedone|folderexcludedtwo)(/|$) - [NC,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/.]+)$ $1/ [L,R]
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME}.php !-f
    RewriteRule ^ - [L]
    
    RewriteRule ^([^/]+)/?$ $1.php [L,QSA]
    
    RewriteRule ^([^/]+)/([^/]+)/?$ $1.php?$1=$2 [L,QSA]
    
    RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ $1.php?$2=$3 [L,QSA]
    

    好了,现在它似乎适用于所有需要的规则:)-那么您能解释一下为什么它现在可以工作吗为什么我不能有一个自定义的500错误文档?实际上你现在可以有自定义的500:)我只是跳过了它,这样我们就不会隐藏实际的问题。因为你的正则表达式有点不正确,所以你得到500是因为循环问题。我上次编辑是为了纠正我在你上次规则中犯的一个小错误。(我一个接一个地测试了你的所有规则,在最后一个规则中,我用
    ([^/])
    代替了
    ([^/]+)
    )。没有找到时,是星(
    *
    )而不是加号(
    +
    )导致了循环错误=>500-不是吗?:)正则表达式可能非常棘手。。。无论如何,非常感谢你,你帮了大忙——一如既往:)非常欢迎。是的,
    *
    /?$
    导致了500个循环错误。正则表达式可能很棘手,但它们也很强大:)
    DirectorySlash On
    
    RewriteEngine On
    RewriteBase /mysubdir/
    
    ErrorDocument 404 /mysubdir/404.php
    
    RewriteRule ^(folderexcludedone|folderexcludedtwo)(/|$) - [NC,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/.]+)$ $1/ [L,R]
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME}.php !-f
    RewriteRule ^ - [L]
    
    RewriteRule ^([^/]+)/?$ $1.php [L,QSA]
    
    RewriteRule ^([^/]+)/([^/]+)/?$ $1.php?$1=$2 [L,QSA]
    
    RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ $1.php?$2=$3 [L,QSA]