2017-08-27 64 views
0

所以我非常努力地试图了解这两段代码之间的差异,但我找不到它。我试图从url中删除“.html”扩展名,但我总是看到两个不同的代码被用于不同的网站。这两个.htaccess代码有什么区别?

第一个代码是:

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

第二个代码是:

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

从我的理解,第一代码似乎取代曾经是在html的路径中的任何字符(例如。example.com/home.html)将其替换为不带.html扩展名的文件(例如example.com/home)。然而,在许多不同的网站中,两者似乎都在不断出现。这就是为什么我想询问是否有人知道两者之间的差异以及这些代码实际上意味着什么?

任何帮助,将不胜感激。

回答

2

首先匹配在.html结尾的路径中的任何请求,并告诉它应该请求相同的路径,在example.com没有.html浏览器。

第二个匹配对任何路径的任何请求,并通知服务器将.html添加到其末尾并将其交付给浏览器。

+0

这也是我的想法,但在许多网站他们说,第二个代码是在它的结尾删除.html。 –

+0

从某种角度来说,这是真的。它在工作结束时使URL不带'.html'。 – Quentin

+0

技术上这两个代码都可以工作吗?或者是第一个更可靠? –