0

Ok。そこで、2 つの異なるドメインからアクセスできるこのサイトを構築しています。そのため、.htaccess で RewriteBase を使用できません。この問題を回避するために私が使用するルール (以下) はうまく機能しているようです。ただし、クリーン URL (WAMP) を使用してローカル ボックスで以下の .htaccess 設定を使用すると、すべて正常に動作しますが、これをライブ サーバー (共有ホスティング LAMP) で使用すると、ナビゲートするすべてのページにホームページが表示されます (ブラウザの URL は明らかに更新されていますが、インデックスの下に 1 つあると思います。

<IfModule mod_rewrite.c>
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} ^/domain1.com/(.*)$
  RewriteRule ^(.*)$ /domain1.com/index.php?q=$1 [L,QSA]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} ^/domain2.com/(.*)$
  RewriteRule ^(.*)$ /domain2.com/index.php?q=$1 [L,QSA]
</IfModule>

どんな助けやアイデアも大歓迎です。

  • ルーク
4

1 に答える 1

2

おそらく最善の方法は、ローカル ボックスで問題を再現し、RewriteLogLevel を上げて、何が起こっているかを確認することです。(通常、共有ホスティングではログレベルを変更できないため)

Apache のメイン構成でディレクトリを書き換えることで、問題を「シミュレート」できる場合があります。(共有ホスティングは明らかに、.htaccess に到達する前に独自の書き換えを行います!) 問題を再現できない場合は、リモート サーバーで試行錯誤のデバッグを開始する必要がある場合があります。これは醜いですが、それが唯一の選択肢である場合:

置換で R (リダイレクト) フラグを使用して、書き換えられた URL をブラウザーに送り返します。TELNET (または適切なブラウザー アドオン) を使用して、HTTP 応答を検査します。

正規表現でドットをエスケープすることを忘れないでください!

補足として、RewriteRule パターンは、その上の RewriteConds の前に一致します。この種のセットアップは、おそらくパフォーマンスが向上します。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/domain1\.com/(.*)$ /domain1.com/index.php?q=$1 [L,QSA]
#                     ^ should be escaped

私はこれをテストしていないことに注意してください。

于 2008-11-03T22:27:26.680 に答える