0

我有一个像example.test.com. 该网站由三个不同的 html 文件组成:

  • 索引.html
  • 产品.html
  • 联系人.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等等。

www他们在 url 之前应该是 no 。

我想出了以下规则:

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 Explorerexample.test.com/index.html中仅重定向到example.test.com/index,我不知道为什么。

4

1 回答 1

1

我不太确定你想用这个 ^[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]

这应该可以正常工作。

于 2012-12-21T14:13:53.363 回答