htaccess はすべてを 1 つのファイルにリダイレクトします (ローカルホストを除く)

htaccess はすべてを 1 つのファイルにリダイレクトします (ローカルホストを除く)

すべてのトラフィックを単一の .php ゲートウェイ ファイルにリダイレクトします。このファイルは認証を行い、ajax を使用して要求されたファイルを取得します。

したがって、次のようなフローの .htaccess が必要です。

if external request for any file
redirect (or rewrite) to /gateway.php

その場合、gateway.php はファイルにアクセスできる必要があります。

私が思いついたベストのものは次のとおりです:

RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_HOST} !^127\.0\.0\.1
RewriteCond %{REQUEST_URI} !/gateway\.php$  
RewriteRule .* http://www.website.com/gateway.php?req=%{REQUEST_URI} [R=302,L]

これは動作していますが、gateway.php の ajax が別のページからコンテンツを取得しようとすると、gateway.php からコンテンツが取得されます (リダイレクトのため)。何らかの方法で例外を追加する必要があります。

ご協力いただければ幸いです。

答え1

そこに RewriteBase は必要ありません。以下を試してください:

RewriteEngine on
RewriteRule ^/gateway\.php$ - [L]
RewriteCond %{REMOTE_HOST} ^127\.0\.0\.1
RewriteRule ^(.*)$ - [L]
RewriteRule ^(.*)$ http://www.website.com/gateway.php?req=%{REQUEST_URI} [R=302,L]

まず、gateway.php が要求された場合は停止することを明示的に指定します。次に、localhost からの要求の場合は URL のみを実行し、それ以外の場合はリダイレクトを実行することを指定します。何らかの内部リダイレクト メカニズムの影響を受ける可能性があります。Apache が実行しているアクションをデバッグするには、RewriteLog と RewriteLogLevel をすぐに設定する必要がある可能性があります。

関連情報