1

需要改进这个规则。

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.htm,这也是不存在的。这将继续循环,直到生成以下错误。

这是我使用上述重写规则的一些实际站点文件,但如果您尝试输入不存在的文件或目录,您将看到500 error.

这是实际文件的链接格式: 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

4

1 回答 1

0

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

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

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

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

发生该500错误的原因通常是在您查找不存在但被重定向回同一文件的文件时创建了一个循环。

如果您负责维护服务器,则需要检查mod_rewrite以防您再次意外创建此类问题。

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]
于 2013-05-18T00:16:19.077 回答