.htaccess-删除.html文件扩展名会导致500内部错误(应该是404?)

时间:2018-08-30 20:05:51

标签: .htaccess url internal-server-error errordocument

我正在使用.htaccess从我的网址中删除.html扩展名。例如...

  

https://www.example.com/work.html> https://www.example.com/work

如果有人试图访问一个不存在的文件/目录(例如https://www.example.com/work/new),我希望网站能够显示404页面(或正确的错误页面)。但这会返回500 Internal Server Error。

.htaccess行 ErrorDocument 500 /errors/500.html 不返回该文件(适用于404、403等)。它返回此错误...

  

此外,尝试使用ErrorDocument来处理请求时,遇到了500 Internal Server Error错误。

Apache错误日志显示...

  

AH00124:由于可能的配置错误,请求超出了10个内部重定向的限制。必要时使用'LimitInternalRecursion'增加限制。使用“ LogLevel调试”获取回溯。

我假设这是由于它实际上是试图在html文件中查找目录(试图在html文件“ work.html”内部查找目录“ new”),所以返回500服务器错误而不是404

下面是我的.htaccess文件。任何人都可以通过更好的方法或解决方法来提供帮助吗?

# Disable Directory Listing
Options -Indexes

# X-Robots-Tag
Header set X-Robots-Tag "noindex, nofollow"

# Rewrite Engine
RewriteEngine On

# Root Directory
RewriteBase /

# Remove .html Extension
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.html\ HTTP
RewriteRule (.*)\.html$ $1 [R=301]

# Remove index + Reference Directory
RewriteRule (.*)/index$ $1/ [R=301]

# Remove Trailing Slash **If Not Directory**
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]

# Forward Request To html File, **But Don't Redirect (Bot Friendly)**
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.html [L]

# Errors
ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html

1 个答案:

答案 0 :(得分:0)

RewriteRule (.*)\.html$ $1 [R=301]

您需要在所有外部重定向上使用Llast)标志,以防止进一步处理。例如:

RewriteRule (.*)\.html$ $1 [R=301,L]

还要确保禁用MultiViews

Options -Indexes -MultiViews

大概是您已经链接到没有扩展名的URL了吗?