Apache .htaccess mod_rewriteおよびクリーンなURL
-
06-07-2019 - |
質問
わかりました。そのため、2つの異なるドメインからアクセスできるこのサイトを構築しています。そのため、.htaccessでRewriteBaseを使用できません。この問題を回避するために使用するルール(下)は、うまく機能しているようです。ただし、クリーンURL(WAMP)を使用してローカルボックスで以下の.htaccess設定を使用すると、すべて正常に動作しますが、ライブサーバー(共有ホスティングLAMP)でこれを使用すると、ナビゲートするすべてのページにホームページ(ブラウザのURLが明らかに更新されている場合でも、インデックスの下にあるものです。
<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>
ヘルプやアイデアは大歓迎です。
- ルーク
解決
おそらく最善の方法は、ローカルボックスで問題を再現し、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
これをテストしていないことに注意してください。