删除尾随.html rewriterule会产生404错误

时间:2015-03-21 12:48:31

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

我修改了.htaccess以从我的网页中删除尾随.html。 htaccess看起来像这样:

RewriteEngine on
RewriteBase /
RewriteCond %{http://www.mydomain.co.uk} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://www.mydomain.co.uk/$1 [R=301,L]

我还在.htaccess的顶部添加了以下内容来设置自定义404页面并停止编制索引:

ErrorDocument 404 /notfound.html
Options -Indexes

重写规则完美无缺。反索引也是如此。但是404页面给了我这个错误:

  

内部服务器错误   服务器遇到内部错误或配置错误,无法完成您的请求。   请联系服务器管理员webmaster@mydomain.co.uk并告知他们错误发生的时间,以及可能导致错误的任何操作。   服务器错误日志中可能提供了有关此错误的更多信息。   此外,尝试使用ErrorDocument处理请求时遇到500内部服务器错误错误。

如果我删除了rewriterule,那么404页面工作正常。我不太了解这类东西,并想知道如何才能使这两个方面正常工作?有人可以帮忙吗?

(PS:我读过this answer并认为它可能适用于我 - 但根本不理解它。)

1 个答案:

答案 0 :(得分:0)

只是想让你知道我找到了解决方案:

ErrorDocument 404 /notfound.html

Options -Indexes

RewriteEngine on
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/\ ]+/)*[^.\ ]+\.htm\ HTTP/
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(([^/]+/)*[^.]+)\.htm$ http://www.example.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ http://www.example.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(([^/]+/)*[^./]+)$ /$1.html [L]

效果很好!