0

訪問者が私のサブドメインでリクエストを実行した後、一致しないURIが続く場合、訪問者をメインドメインにリダイレクトしたいと思います。

たとえば、訪問者はでリソースにアクセスできますが、のような私のサブドメインで一致しない他のリソースにアクセスしようとすると、sub.domain.com/product/10リダイレクトされる必要があります。domain.comproduct/:idsub.domain.com/anOtherResource

これは、apacherewriteモジュールを使用して行う必要があります。私は!オペレーターがその仕事をすることができることを発見しました、しかしそれは私のために働いていません。

これが.htaccessファイルからの私のリライト設定です:

RewriteCond %{HTTP_HOST} sub\.domain\.com
RewriteCond %{REQUEST_URI} !^/product/[0-9]+$
RewriteRule ^(.*)$ http://www.domain.com [L,R]

この構成もテストしました:

RewriteCond %{HTTP_HOST} sub\.domain\.com
RewriteRule !^/product/[0-9]+$ http://www.domain.com [L,R]

どこが間違いなのかわからない...

[編集]

.htaccessファイルはWordpress用に構成されています。これが.htaccess全体です:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{HTTP_HOST} sub.domain.com
    RewriteCond %{REQUEST_URI} !^/product/[0-9]+$
    RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R]

    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
4

2 に答える 2

4

問題はWordpressRewrite構成にあったので、何が起こったのですか?

ステップ1

sub.domain.com/product/1でリクエストを実行したため、これらのRewriteCondと一致しません

RewriteCond %{HTTP_HOST} sub.domain.com
RewriteCond %{REQUEST_URI} !^/product/[0-9]+$

その後、リダイレクトされませんwww.domain.com

ステップ2

次の条件への書き換えを続行します(Worpdress書き換え):

RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

このステップでは、内部リダイレクト(クライアントには送信されません)をに送信しますsub.domain.com/index.php

ステップ3

リダイレクトのため、以前のRewriteCondが再度適用されます

RewriteCond %{HTTP_HOST} sub.domain.com
RewriteCond %{REQUEST_URI} !^/product/[0-9]+$
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R]

それは条件と一致し、それから私がそれを予期してwww.domain.comいなかった間にクライアントをリダイレクトします。

ソリューション

以下のようにindex.phpにRewriteCondを追加することで、問題を修正しました。

RewriteCond %{HTTP_HOST} sub.domain.com
RewriteCond %{REQUEST_URI} !^/product/[0-9]+$
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R]

これで、WorpressRewritingによって送信された内部リダイレクトを管理します。

于 2012-06-21T16:00:45.680 に答える
0

書き換えルールは問題ないように見えますが、次のことを試してください。

RewriteCond %{HTTP_HOST} ^sub[.]domain[.]com$
RewriteCond %{REQUEST_URI} !^/product/[0-9]+$
RewriteRule ^(.*)$ http://www.domain.com [L,R]

これが機能しない場合は、VirtualHost構成の内容全体をコピーして貼り付ける必要がある場合があります。これは、他の問題を引き起こしている可能性があるためです。

于 2012-06-12T12:18:32.900 に答える