我有一个类似example.test.com
的域。该网站由三个不同的html文件组成:
- index . html
- products.html
- contact.html
如果用户输入example.test.com/index.html
, url将被重定向到example.test.com
。
example.test.com/index
也应该变成example.test.com
example.test.com/contact.html
应该是example.test.com/contact
,依此类推。
url前不能有www
我想出了以下规则:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^example.test.com$ [NC]
RewriteRule ^(.*)$ http://example.test.com/$1 [L,R=301]
RewriteCond %{SCRIPT_FILENAME}/ -d
RewriteCond %{SCRIPT_FILENAME}.html !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [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?|php) HTTP/
RewriteRule ^index.(html?|php)$ http://example.test.com/ [R=301,L]
在Firefox中一切工作如预期,但在Chrome和Internet Explorer example.test.com/index.html
只重定向到example.test.com/index
,我不知道为什么。
我不太确定你想用^[A-Z]{3,9}
部分实现什么,但这里的罪魁祸首是在你最后一个条件下索引末尾的点。改为:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index(|.html|.php) HTTP/
RewriteRule ^index.(html?|php)$ http://example.test.com/ [R=301,L]