如何.html
从静态页面的网址中删除?
另外,我需要将任何网址重定向.html
到没有该网址的网址。(即www.example.com/page.html
到www.example.com/page
)。
如何.html
从静态页面的网址中删除?
另外,我需要将任何网址重定向.html
到没有该网址的网址。(即www.example.com/page.html
到www.example.com/page
)。
Answers:
我认为对乔恩回答的某些解释将具有建设性。下列:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
检查指定的文件或目录是否分别不存在,则重写规则将继续:
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
但是,这是什么意思?它使用regex(正则表达式)。这是我之前做的一些事情...
我认为是正确的。
注意:测试时,.htaccess
请勿使用301重定向。使用302,直到完成测试为止,因为浏览器将缓存301。参见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替换html处的所有html。
使用apache下的.htaccess,您可以像这样进行重定向:
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>
!-f
这应该为您工作:
#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} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]
您还需要确保自己也有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} ^[A-Z]{3,9}\ /html/(.*).html\ HTTP/
RewriteRule .* http://localhost/html/%1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*)\ HTTP/
RewriteRule .* %1.html [L]
</IfModule>
我使用此.htacess从我的网址站点中删除了.html引文,请确认这是正确的代码:
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} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://www.proofers.co.uk/new/$1 [R=301,L]
RewriteBase /
位。不幸的是,我不知道它为什么起作用,但是我想我很快就会学到。
要从网址中删除.html扩展名,可以在root / htaccess中使用以下代码:
#mode_rerwrite start here
RewriteEngine On
# does not apply to existing directores, meaning that if the folder exists on server then don't change anything and don't run the rule.
RewriteCond %{REQUEST_FILENAME} !-d
#Check for file in directory with .html extension
RewriteCond %{REQUEST_FILENAME}\.html !-f
#Here we actually show the page that has .html extension
RewriteRule ^(.*)$ $1.html [NC,L]
谢谢