1

私のapacheconfは、次のように.txtファイルにphpで生成されたテキストを表示するように設定されています。

Alias /file.txt /var/www/domain.com/html/file.php

問題は、これが任意の数の先頭のスラッシュで機能するようになったことです。たとえば、次のすべての作業:

domain.com/file.txt
domain.com//file.txt
domain.com///file.txt

ただし、複数のスラッシュをすべてルートにリダイレクトする必要があります。

domain.com//file.txt =====[301]=====> domain.com/file.txt

これらの複数のスラッシュURLの1つが実際にインデックス付けされている場合を除いて、これは通常問題にはなりません。おっと。

次に、複数のスラッシュをすべてルートに301(永続的に)リダイレクトする必要があります。(したがって、//file.txtは/file.txtにリダイレクトされます)

手伝ってくれますか?

4

1 に答える 1

3

ブラウザに次のように入力するhttp://domain.com////////file.txtと、書き換えエンジンはURIとしてのみ認識します/file.txt。ただし、ブラウザに次のように入力するhttp://domain.com///path////to/////file.txtと、書き換えエンジンはURIを。と見なし/path////to/////file.txtます。余分な先頭のスラッシュはに表示されないため、実行できるのは変数%{REQUEST_URI}との照合のみです。%{THE_REQUEST}

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /[/]+
RewriteRule ^ %{REQUEST_URI} [L,R=301]

これは、ブラウザのアドレスバーに表示される余分な先頭のスラッシュのみを満たし、URIのどこかに表示される二重のスラッシュを無視することはありません。それらの世話をするために、あなたはこのような何かをする必要があるでしょう:

RewriteCond %{REQUEST_URI} ^(.+)//(.+)$
RewriteRule ^ %1/%2 [L,R=301]
于 2012-08-02T19:45:39.940 に答える