3

私はこれに対する答えを求めてStackOverflowを精査し、多くの質問が近づくのを見てきましたが、まだ何も機能していません。

.htaccessそれを呼び出すドメインに基づいて、異なるルールを適用してもらいたいのですが。基本的に、subdomain.example.comがヒットした場合は、google.comにリダイレクトします。ローカルホストがヒットした場合は、yahoo.comにリダイレクトします。www.example.com(またはexample.com)がヒットした場合は、bing.comにリダイレクトします。

後で実際の書き換えルール(環境変数とhtpasswd保護の設定)を追加しますが、最初に「ifthen」の部分を機能させる必要があります。

私の(機能していない)コードは以下のとおりです。どんな助けでも大歓迎です。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$
RewriteRule http://google.com/ [L,R=301]

RewriteCond %{HTTP_HOST} ^localhost$
RewriteRule http://yahoo.com/ [L,R=301]

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

編集:以下のバルタのコメントに基づいて更新された(しかしまだ機能していない)コード。

RewriteEngine On

RewriteCond %{HTTP_HOST} ^subdomain\.domain\.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? - [S=1]
RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteCond %{HTTP_HOST} ^localhost$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? - [S=7]
RewriteRule ^(.*)$ /subdir/www/index.php/$1 [L]
RewriteRule ^ - [E=MYSQL_DB_HOST:localhost]
RewriteRule ^ - [E=MYSQL_DB_NAME:XXX]
RewriteRule ^ - [E=MYSQL_USERNAME:XXX]
RewriteRule ^ - [E=MYSQL_PASSWORD:XXX]
RewriteRule ^ - [E=BASE_URL:XXX]
RewriteRule ^ - [E=ENVIRONMENT:XXX]

RewriteCond %{HTTP_HOST} ^example\.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? - [S=1]
RewriteRule ^(.*)$ /index.php/$1 [L]
4

2 に答える 2

4

[L,R=301] フラグを使用してhttp://bing.comを書き換えるのではなく、 http ://bing.comを [L,R=301] に書き換えようとしています。試すRewriteRule ^(.*)$ http://bing.com/ [L,R=301]

IF-ELSE について: 次のように RewriteRule で S フラグを使用します。

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$
RewriteRule .? - [S=<here comes the number of your directives in the "else" part>]
# Here comes your ELSE part:
# Etc. etc.
RewriteRule .? - [S=<here comes the number of your directives in the "if" part>]
# Here comes your IF part.

上記の例では、RewriteCONd が一致した場合、S フラグを持つ RewriteRule は次のディレクティブをスキップし、N が S= 部分の後に定義されている N 番目のスキップの後にスキップを停止します。これは ELSE 部分です。N 番号には、IF 部分をスキップする次の RewriteRule を含める必要があります。

スキップしているため、順序が逆になっています。RewriteCond を無効にすると、通常の順序で問題ありません。

Apache ドキュメントの元の例は次のとおりです: https://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_s

編集: そのようなことを試してください:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^subdomain\.domain\.com$
RewriteRule .? - [S=1]
RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteCond %{HTTP_HOST} !^localhost$
RewriteRule .? - [S=7]
RewriteRule ^(.*)$ /subdir/www/index.php/$1 [L]
RewriteRule ^ - [E=MYSQL_DB_HOST:localhost]
RewriteRule ^ - [E=MYSQL_DB_NAME:XXX]
RewriteRule ^ - [E=MYSQL_USERNAME:XXX]
RewriteRule ^ - [E=MYSQL_PASSWORD:XXX]
RewriteRule ^ - [E=BASE_URL:XXX]
RewriteRule ^ - [E=ENVIRONMENT:XXX]

RewriteCond %{HTTP_HOST} !^example\.com$
RewriteRule .? - [S=1]
RewriteRule ^(.*)$ /index.php/$1 [L]
于 2012-07-17T18:48:12.880 に答える