0

私はのようなドメインを持っていますexample.test.com。Webサイトは、次の3つの異なるhtmlファイルで構成されています。

  • index.html
  • products.html
  • contact.html

したがって、ユーザーexample.test.com/index.htmlがURLを入力すると、にリダイレクトされる必要がありますexample.test.com

またexample.test.com/indexexample.test.com

example.test.com/contact.htmlする必要がexample.test.com/contactあります。

wwwそれらはURLの前にあるべきではありません。

私は次のルールを思いついた:

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、理由はわかりません。

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 に答える