1

私が持っている必要があります:

http://www.example.com/v1/my-project/はhttp://example.com/my-project/ にリダイレクトされます

それで :

(1) http_host から www を削除します

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

(2) request_uri の「v1/」部分を削除します

RewriteCond %{REQUEST_URI} ^/v1/(.*)$ [NC]
RewriteRule . %1 [R=301,L]

(3) 404 もすべてホームページにリダイレクトしたい。

ErrorDocument 404 /

(4) 最後に、すべてのドキュメントは実際には現在アクティブな Web サイトをホストする「v2/」フォルダーにありますが、URL に「v2」は必要なく、「/」のみが必要です。

RewriteCond %{REQUEST_URI} !^/v2/ [NC]
RewriteRule ^(.*)$ /v2/$1 [NC,L]

だから、ここに私のルールがあります。私の質問は次のとおりです: 私は管理していません (2): / にリダイレクトされます (ルール (3) のためだと思います。私のルールの順序は間違っているに違いないと思いますが、正しく理解できないようです。できます。手伝う ?

4

2 に答える 2

3

「ルール 3」はまったくルールではなく、RewriteRules に対するその順序は重要ではありません。ルール 2 は、他の理由で失敗しています。それがあなたの問題に対処するかどうかはわかりませんが、次のように書くことでルールをいくらか単純化できます。

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule (.*) http://example.com/$1 [R=301,L]

RewriteRule ^v1/(.*) /$1 [R=301,L,NC]

RewriteCond %{REQUEST_URI} !^/v2/ [NC]
RewriteRule (.*) /v2/$1 [NC,L]
于 2009-07-10T11:25:35.547 に答える
0

最初に外部リダイレクト (Rフラグ) を引き起こしているルールを記述し、次に他のルールを記述する必要があります。それ以外の場合、既に書き換えられた URL が外部リダイレクトに使用される可能性がありますが、これは内部リダイレクトのみを目的としていました。

したがって、現在の順序は変更しません。

于 2009-07-10T12:31:08.190 に答える