2012-12-13 424 views
3

.html扩展我知道这个问题以前有人问,但没有人知道的隐藏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] 

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

回答

3

你有你的规则相反的(第一个原本工作):

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

你的原规则为RewriteRule ^(.*)\.html$ $1 [L],这意味着“如果请求的资源名以.html结尾,那么向浏览器发出重定向,告诉它询问我们是否在没有HTML的情况下有相同名称的东西”,结果是404(因为Apache doesn'没有什么要说的为.html服务'少资源)。

通过切换.html到我们改变规则说“如果所请求的资源名称是不是磁盘上的文件和目录的路径RewriteRule ^(.*)$ $1.html [L]然后尝试重新路由请求(在内部,不告诉浏览器)仿佛它以.html结尾“。

+0

我试图与此代码..但是这么想的工作:( – Natasha

+0

此代码并没有为网站工作之一 – jtheletter

1

请注意,您不需要复杂的(本质上)RewriteRules这样的任务。

mod_negotiation apache模块默认情况下默认启用,它提供了Multivews选项的行为。

如果服务器收到/一些/目录/ foo的请求和/一些/目录/ foo的不存在,则服务器读取的目录寻找名为foo的所有文件。*,并有效假货了类型映射,它命名所有这些文件,为它们分配相同的媒体类型和内容编码,如果客户端通过名称请求其中的一个,将会有这种编码。然后,它会根据客户的要求选择最佳匹配,然后返回该文档。

.i.e请求foo/bar将成为foo/bar如果我们的目录,并将seak为foo/bar.htmlfoo/bar.txt和这样等如不。

你只需要确保这个选项在当前的情况下(例如目录)

Options +Multiviews 
+0

+1 - 我不知道'mod_negotiation'! –

0

使用本

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