.htaccess文件不会删除.html扩展名

时间:2016-01-15 01:43:51

标签: html .htaccess

我对此很新,并且想知道为什么我的.htaccess文件中的代码不能从导航栏中的每个链接中删除.html扩展名,可以在www上看到实时网站。 tekmillion.com

.htaccess代码如下:

RewriteEngine On
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ $1.html [NC,L]

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我认为您的问题在于,期望您在导航栏中使用.html的链接应该重定向到友好的网址。这不是这条规则的工作原理。

您当前的规则允许您在浏览器中使用此类型的网址http://example.com/hello,并在内部将其重写为http://example.com/hello.html

RewriteEngine On
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ $1.html [NC,L]

如果您的导航栏中仍有http://example.com/hello.html之类的网址,则该规则将不会执行任何操作,因为该请求适用于/hello.html real文件。

因此,为了将http://example.com/hello.html重定向到没有html扩展名的友好版本并且为了防止使用.html,您需要添加另一个规则。这是您需要使用的完整规则。

RewriteEngine On
RewriteBase /

#if someone enters URL with .html extension redirect to extensionless version
RewriteRule %{THE_REQUEST} ^[A-Z]{3,}\s/(.+)\.html
RewriteRule ^ %1? [R=302,L]

#internally rewrite extensionless URL to .html file
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ $1.html [NC,L]

让我知道这对你有何影响。