如何隐藏网站网址的.html扩展名

时间:2012-12-13 05:52:46

标签: php apache .htaccess mod-rewrite url-rewriting

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

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

在删除扩展程序之前,该网址会显示为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 个答案:

答案 0 :(得分: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“结尾。

答案 1 :(得分:1)

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

mod_negotiation apache模块(通常默认启用)通过Multivews选项提供此类行为。

  

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

。如果foo/bar请求我foo/bar,如果我们是一个目录,则会foo/bar.html foo/bar.txtOptions +Multiviews 等等,如果没有,则会提供{{1}}。

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

{{1}}

答案 2 :(得分:1)

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

答案 3 :(得分:0)

使用此

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