Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 500服务器错误,在不存在的文件上隐藏.htm和.html文件扩展名_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache 500服务器错误,在不存在的文件上隐藏.htm和.html文件扩展名

Apache 500服务器错误,在不存在的文件上隐藏.htm和.html文件扩展名,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,需要改进这一规则 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*) /$1.htm [L] 根据我的托管公司:在不存在的页面上出现500个错误的原因是应用程序使用的上述重写规则,如下所示: 上述规则意味着对不存在的文件或目录的任何请求都将重定向到URI.htm,其中URI是请求的URI 继续:在本例中,archives.hwg.org/thispagedoesnot

需要改进这一规则

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) /$1.htm [L]
根据我的托管公司:在不存在的页面上出现500个错误的原因是应用程序使用的上述重写规则,如下所示: 上述规则意味着对不存在的文件或目录的任何请求都将重定向到URI.htm,其中URI是请求的URI

继续:在本例中,
archives.hwg.org/thispagedoesnotexist
将被重写为
archives.hwg.org/thispagedoesnotexist.htm
,这是一个不存在的页面,因此重写规则尝试再次将请求重写为
archives.hwg.org/thispagedoesnotexist.htm
,该页面也不存在。这将继续循环,直到生成以下错误

下面是一些使用上述重写规则的实际站点文件,但是如果您尝试键入不存在的文件或目录,您将看到
500错误

这是指向实际文件的链接格式:
archives.hwg.org/hwg-theory/01082413075904。02137@kira.pacbell.net
这是实际的文件:
archives.hwg.org/hwg-theory/01082413075904。02137@kira.pacbell.net.htm

这是指向实际文件的链接格式:
archives.hwg.org/hwg theory/2001/07
这是实际的文件:
archives.hwg.org/hwg theory/2001/07.htm

假设
archives.hwg.org
是域,那么这应该是可行的。这些规则必须按顺序执行。以不同的顺序,文件最初不会被找到,服务器将循环多次,直到找到匹配项为止(使每个页面与服务器的交互变慢)

我们正在检查文件是否不存在。如果它不存在,那么我们试着向下搜索一个“目录”。最终,我们得到了任何文件,任何不存在的目录都会返回主页
index.html

注意如果站点上的任何内容发生更改或您在特定目录中遇到错误,服务器将尝试将用户重定向到一个文件,该文件以
.htm
结尾。根据规则,文件夹中的所有文件都必须以
.htm
结尾

请记住,Unix/Linux中的所有内容都区分大小写(除非故意重写)。此外,web服务器会查找查询到的特定文件。您的特定主文件是
index.html
,而不是
index.htm

500
错误通常是因为在查找不存在但被重定向回同一文件的文件时创建了循环

如果您负责维护服务器,则需要在再次意外造成此类问题时签出

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

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

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.html [L]

我使用了前3条重写规则,但如果键入任何不存在的文件,仍然会出现错误。是的,你可以自己测试错误,因为archives.hwg.org是域名。这两套规则在没有R-301的情况下也能正常工作,因为.htm和html文件确实存在。好的,我已经更新了代码,使其不匹配任何带有句点的预期文件名。在使用新编辑的版本时,我在archives.hwg.org的所有页面上都会出现错误。我已恢复到以前的工作版本,但对于不存在的文件仍然存在错误。我意识到我不需要隐藏.html扩展名,只需要忽略子目录中的index.html文件,例如archives.hwg.org/hwg-theory和年份,例如archives.hwg.org/hwg-theory/2003文件夹。因此,不确定您添加的规则代码是否会与.html文件冲突,这可能会导致新的错误。四个工作规则中的前三个一起工作,但当包含第四个规则时。我发现服务器错误。使用此最新版本时。然而。我没有收到丢失文件的“500服务器错误”,但现在它不会忽略文件大小写字符,因此某些页面不会显示。重写的第三部分仍然会导致500服务器错误,因为规则意味着对不存在的文件或目录的任何请求都将重定向到URI.htm,其中URI是请求的。是否可以修改以使不存在的页面不创建/重定向到.htm?