2012-03-23 12 views
0

サイトが動的で、一部が.htmlファイルで生成されるリダイレクト状況があります。mod_rewriteはファイルに.htmlを追加し続けています

他のURLが動的に生成されるのに対し、例えば、mysite.com/homepageとmysite.com/products/42がmysite.com/cart

両方mysite.comように、実際

静的HTMLファイルでありますwww.mysite.comは同じ場所を指しています。しかし、私はすべてのトラフィックをmysite.comからwww.mysite.comにリダイレクトしたいと思います。

私は近づいていますが、私はApacheが静的な.htmlファイルが存在する場所のURLの末尾に.htmlを追加していますが、これは嫌いです。

私はこのリダイレクトする:これに

http://mysite.com/products/42 

http://www.mysite.com/products/42 

しかし、Apacheは(42.htmlは、実際のhtmlファイルであるため)の代わりに、このことをしている:

http://www.mysite.com/products/42.html 

私はそれを望んでいません - www.mysite.com/products/42にリダイレクトしたいです

ここで私が始めたものです:私はパラメータや.htmlのがオプション作ってみましたが、.htmlのはまだリダイレクトで追加取得され

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC] 

RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,L] 

:私は

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC] 

RewriteRule ^(.*)?(\.html)?$ http://www.mysite.com/$1 [R=301,L] 

何をしています違う?本当に感謝:)

+0

@WayneArthurton:あなたは私の答えで作業していないかを説明してくださいすることができた場合、私はさらにあなたを助けるためのより良い位置にあってもよいです。 – anubhava

答えて

2

ここでは、DOCUMENT_ROOTの下であなたの.htaccessファイルに必要となるコードです:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

## first add www to your domain for and hide .html extension 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC] 
RewriteRule^http://www.mysite.com%1 [R=301,L] 

## add www to your domain for other URIs without .html extension 
RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC] 
RewriteRule^http://www.mysite.com%{REQUEST_URI} [R=301,L] 

## To internally redirect /dir/foo to /dir/foo.html 
RewriteCond %{REQUEST_FILENAME}.html -f [NC] 
RewriteRule^%{REQUEST_URI}.html [L] 
+0

これは2回のリダイレクトを必要としませんか?私は1だけを行い、.htmlを追加しないことを好みます。 – user12093810293812031

+0

1つのリダイレクトでも実行できますが、それは '.html'拡張子のみを処理します。あなたの元のURIが 'http:// mysite.com/foo /'であれば 'http:// www.mysite.com/foo /'ではないのですか? – anubhava

+0

私の答えを編集しました、plsは今それをチェックします。 – anubhava

関連する問題