我修改了.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并认为它可能适用于我 - 但根本不理解它。)
答案 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]
效果很好!