4

我知道以前有人问过这个问题,但有人知道隐藏 .html 扩展名的好方法吗?我已经尝试了许多代码和来自https://stackoverflow.com/的许多答案,但没有看到结果。那是你我再问你一次

我有一个静态网站,我想删除扩展以清理我的网址。我正在使用静态 html 文件。

在删除扩展之前,该 url 将显示为website.com/about.html.

删除扩展后,它看起来像 website.com/about。希望这很清楚。

我有一个 .htaccess 文件,我尝试了许多代码,但它不起作用。这里有一些代码

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301] 



RewriteCond %{THE_REQUEST} \ /(.+/)?index(\.html)?(\?.*)?\  [NC]
RewriteRule ^(.+/)?index(\.html)?$ /%1 [R=301,L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.html$ /$1 [R=301,L]

RewriteCond %{SCRIPT_FILENAME}.html -f
RewriteRule [^/]$ %{REQUEST_URI}.html [QSA,L]



RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://%{HTTP_HOST}/ [R=301,L]



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



RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html


RewriteBase /
RewriteEngine on
RewriteRule ^(.*)\.htm$ $1.html [nc]


RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L]

但是我没有看到任何结果... :(

4

4 回答 4

3

您的规则颠倒了(第一个规则会起作用):

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.html [L]

您最初的规则是RewriteRule ^(.*)\.html$ $1 [L]“如果请求的资源名称以结尾,.html则向浏览器发出重定向,告诉它询问我们是否有任何没有 HTML 的同名内容”。这会导致 404(因为 Apache 没有任何东西可以为.html“更少的资源”提供服务)。

通过切换.html到目的地RewriteRule ^(.*)$ $1.html [L],我们将规则更改为“如果请求的资源名称不是磁盘上的文件或目录,则尝试重新路由请求(在内部,不要告诉浏览器),就好像它以“结束.html”一样.

于 2012-12-13T08:11:49.533 回答
1

请注意,此类任务不需要复杂的(本质上)RewriteRules。

mod_negotiation apache 模块,通常默认启用,通过 Multivews 选项提供这种行为

如果服务器收到对 /some/dir/foo 的请求并且 /some/dir/foo 不存在,则服务器读取目录以查找所有名为 foo.* 的文件,并有效地伪造一个类型映射,其中命名所有这些文件,为它们分配相同的媒体类型和内容编码,如果客户端按名称要求其中之一。然后它选择最符合客户要求的匹配项,并返回该文档。

.ie如果它是我们的目录,则请求foo/bar将提供服务,如果不是,则将搜索,等等。foo/barfoo/bar.htmlfoo/bar.txt

您只需要确保在当前上下文中激活此选项(例如目录)

Options +Multiviews
于 2012-12-13T08:43:03.457 回答
1

用这个

    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ $1.html [L,QSA]
于 2012-12-13T09:05:33.263 回答
1

看看这篇文章http://alexcican.com/post/how-to-remove-php-html-htm-extensions-with-htaccess/我还没有尝试过,但演示似乎很有说服力

于 2013-11-23T13:18:37.820 回答