2011-12-10 7 views
1

ここに私の書き換えルールは以下のとおりです。それが生産だ場合複数の末尾のスラッシュを削除するにはどうすればよいですか?

########### 
# Rewrite # 
########### 
# Settings 
RewriteEngine On 
RewriteBase/
# Cache Busting 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} "^(.+)\.\d+\.(css|js)$" [NC] 
RewriteRule "^.*$" "/%1.%2" [L] 
# No Index 
RewriteCond %{THE_REQUEST} "\ /.*index\.php.*\ " [NC] 
RewriteRule "^(.*)index\..+$" "/$1" [L,NC,R=301] 
# No Question Mark 
RewriteCond %{THE_REQUEST} "\ /[^?]*\?\ " 
RewriteRule "^(.*)$" "/$1?" [L,R=301] 
# WWW 
# RewriteCond %{HTTP_HOST} !"^(?:static|www)\.(.+)$" [NC] 
# RewriteCond %{HTTPS}s "^on(s)|" 
# RewriteRule "^(.*)$" http%2://www.%1/$1 [L,R=301] 

すべてが(任意の提案はパフォーマンスを改善するために、またはより良い正規表現のためにとにかく、歓迎されている)が、私は奇妙な状況を経験していると私は理解することはできません正常に動作します私の書き換えルールやデフォルトのApacheの振る舞いによって。 私のURLが "/"で終わる場合、書き換えなくても、できるだけ多くのスラッシュを付けることができます。例えば

、私のアドレスバーに、私は次のように挿入した場合:

ます。http:// [MY-HOST-NAME] //////////////// ///////////

これらのスラッシュはすべて削除されていません。そして私はまだindex.phpのページを見ています。 私は次のアドレスを挿入した場合:

ます。http:// [MY-HOST-NAME] /メンバー///

をすべてのものを複数のスラッシュが削除されていないと私は私のメンバーを見ることができますindex.phpページ。 など...

誰かが私を助けてくれますか?どうもありがとう!

+0

まあ、正確にどのルールがスラッシュを書き換え、なぜでしょうか? (私は気にしませんし、あまりにも多くのスラッシュを "ユーザーエラー"として扱いますが...) –

+0

なぜそれは重要ですか? *あなたのウェブサイト*に余分な末尾のスラッシュが追加されてはいけない場合は、それを心配しないでください。ユーザーが手動で追加する余分なスラッシュを削除するために余分なHTTPリクエストを無駄にすると、最終的に表示されるページに何の影響も与えません。 – animuson

+0

それが問題なのかどうかはなぜ重要なのですか? 解決策があれば投稿してください。あなたがしていない場合は、ちょうど答えていない。私は、 "/"と "//"(Google Botを含む)の両方をリクエストしているボットの量が多いことを知り、インデックスエンジンを2台のエンジンでインデックスにすることができます。本当にSEOに優しいわけではありません。 –

答えて

3
RewriteCond %{THE_REQUEST} // 
RewriteRule .* $0 [R] 
+0

Damned!世界はとても簡単です。 :-) –

+0

@EddyFreddy世界の仕組みを知っているなら、それは:-) – Gerben

+0

Apacheで私にとってうまくいかないようです。 –

0

Gerbensの回答は.htaccessではうまく機能しますが、グローバル設定ではそれほど効果がありません。 これはリダイレクトを送信する前にすべてのスラッシュを削除します。

# if match set environment variable and start over 
RewriteRule ^(.*?)//+(.*)$ $1/$2 [E=REDIR:1,N] 

# if done at least one. redirect with 301 
RewriteCond %{ENV:REDIR} 1 
RewriteRule ^/(.*) /$1 [R=301,L] 
0
RewriteEngine on 
RewriteBase/

#existing rule 
#remove the www. 
RewriteCond %{HTTP_HOST} ^www.website.co.uk$ [NC] 
RewriteRule ^(.*)$ http://local.website.co.uk/$1 [R=301,L] 

#new Rule 
#if its not a directory 
RewriteCond %{REQUEST_FILENAME} !-d 
#and it has a trailing slash then redirect to URL without slash 
RewriteRule ^(.+)/$ /$1 [L,R=301] 

# rest of your existing rules go here 
関連する問題