如何从URL中删除.html
你有任何想法如何从静态页面的URL中删除.html。 此外,我需要重定向任何网址.html到没有(即www.example.com/page.html到www.example.com/page)。
使用.htaccess下的apache你可以做这样的重定向:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\.html$ /$1 [L,R=301]
至于从网址中删除.html,只需链接到没有.html的页面
<a href="http://www.example.com/page">page</a>
这应该为你工作:
#example.com/page will display the contents of example.com/page.html RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^(.+)$ $1.html [L,QSA] #301 from example.com/page.html to example.com/page RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /.*\.html\ HTTP/ RewriteRule ^(.*)\.html$ /$1 [R=301,L]
我想对乔恩的答案有一些解释是有建设性的。 下列:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d
检查如果指定的文件或目录分别不存在,则重写规则继续:
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
但是,这是什么意思? 它使用正则表达式(正则表达式) 。 这是我之前做的一些事情…
我认为这是正确的。
注意:当测试您的.htaccess
不使用301重定向。 使用302直到完成测试,因为浏览器将缓存301s。 请参阅https://stackoverflow.com/a/9204355/3217306
更新:我有点误会.
匹配除换行符之外的所有字符,所以包含空格。 此外, 这是一个有用的正则表达式备忘单
资料来源:
http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-fd/2034/2
https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules
要从您的网址中移除.html扩展名,您可以在root / htaccess中使用以下代码:
RewriteEngine on RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC] RewriteRule ^ /%1 [NC,L,R] RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^ %{REQUEST_URI}.html [NC,L]
注意:如果你想删除任何其他的扩展名,例如删除.php扩展名,只需在上面的代码中用php代替。
您将需要确保您有Options -MultiViews
以及。
以上都不是标准cPanel主机上的工作。
这工作:
Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.html [NC,L]
感谢您的回复。 我已经解决了我的问题。 假设我在http://www.yoursite.com/html下有我的页面,则应用以下.htaccess规则。
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /html/(.*).html\ HTTP/ RewriteRule .* http://localhost/html/%1 [R=301,L] RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /html/(.*)\ HTTP/ RewriteRule .* %1.html [L] </IfModule>
我使用这个.htacess从我的网址删除.html extantion,请验证这是正确的代码:
RewriteEngine on RewriteBase / RewriteCond %{http://www.proofers.co.uk/new} !(\.[^./]+)$ RewriteCond %{REQUEST_fileNAME} !-d RewriteCond %{REQUEST_fileNAME} !-f RewriteRule (.*) /$1.html [L] RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /([^.]+)\.html\ HTTP RewriteRule ^([^.]+)\.html$ http://www.proofers.co.uk/new/$1 [R=301,L]
RewriteRule /(.+)(\.html)$ /$1 [R=301,L]
试试这个:)不知道它是否工作。