2

htaccess と mod_rewrite を使用して、1 つのドメインとそのサブフォルダーの 2 つを別のドメインでマスクしようとしています。例: http://example.com/sub/sub-sub/tohttp://example-2.com/これhttp://example-2.com/はブラウザのアドレス バーに表示されるものですが、のコンテンツはhttp://example.com/sub/sub-sub/ページに表示されるものです。

これを達成するはずのこの質問/回答を見つけましたが、実装すると機能しません。

現在のhtaccess:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.+) [NC]
RewriteRule .*   http://example.com/sub/sub-sub/%1 [L]

Options -Multiviews

これが私のディレクトリのビューです:

http://i.imgur.com/nihz1al.png

4

2 に答える 2

2

これを試すことができます:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  !^/sub/sub-sub         [NC]
RewriteCond %{REQUEST_URI}  ^/(.*)                 [NC]
RewriteRule .*   http://example.com/sub/sub-sub/%1 [L]

永久にリダイレクト

http://example-2.com/anything

に:

http://example.com/sub/sub-sub/anything

セグメント パスを除いて、すべての文字列は固定されていると想定されますanything

目に見えるリダイレクトを永続的にするには、 に置き換え[L]ます[R=301,L]

上記のルール セットは、http://example-2.comルート ディレクトリの 1 つの .htaccess ファイルに含める必要があります。

アップデート:

のように、パスのない受信 URL のルールをスキップするには、次のhttp://example-2.com/行を置き換えます。

RewriteCond %{REQUEST_URI} ^/(.*) [NC]

これで:

RewriteCond %{REQUEST_URI} ^/(.+) [NC]

于 2013-02-19T23:33:39.230 に答える
2

-文字クラス内を除いて、エスケープする必要はありません。さらに、最初または最後の文字としてエスケープしないようにすることもできます。

RewriteRuleでは、パターンはドメインではなく URL パスに対してテストされます。ドメインに対してテストする必要がある場合は、RewriteCondを使用できます

RewriteCond %{HTTP_HOST} !example-2.com
RewriteRule ^/?sub/sub-sub/(.*) http://example-2.com/$0 [R,L]

RewriteCond %{HTTP_HOST} example-2.com
RewriteCond %{REQUEST_URI} !^/?sub/sub-sub
RewriteRule .* sub/sub-sub/$0
于 2013-02-19T23:28:43.433 に答える