私が働いている会社から、自社の Web サイトの 1 つを別の Web サイトのサブドメインにするように依頼されました。次に、「ログイン/ログアウト」セッション制御をプライマリ ドメインからサブドメインに拡張するように依頼されました。
これを行うと、制御/管理の問題があることがわかります。膨大な数の個々のページと、広範なディレクトリ構造のため、各ページに PHP スニペットを追加して、ログイン状態に基づいてリダイレクトするのは非常に複雑です。
これが私の解決策です..問題や、私に役立つ何か他のことを教えてください.
- Mod_rewrite を使用して、サブドメインのすべてのリクエストを特定のページ ( handler.php?requested_url= ) にリダイレクトします。
彼らのウェブサイトに「サイトの許可/禁止ルール」セクションを作成する予定です。このセクションには、次のようなルールを持つ 1 つのテキスト ボックスが含まれます。
+/weather/ ---> will allow anyone access to any url that contains "/weather/" somewhere within it, irregardless of logged-in status. -/weather/premium/ ---> will only allow access to a url that contains /weather/premium to logged-in users.
これは、ファイルrules.phpに格納されている配列に出力され、次のようになります。
$ruleList = array(); $ruleList[] = '+/weather/'; $ruleList[] = '-/weather/premium/';
handler.phpでは、ユーザーがログインしている場合は、それらをrequested.urlに転送します。ユーザーがログインしていない場合は、すべてのページがログインしていないユーザーに制限されていると仮定することから始めます。handler.phpはrequested_urlを解析し、rules.phpに対してチェックして、明示的なアクセス許可が設定されているかどうかを確認します。次に、ルールが非ログイン アクセスを許可する場合は、ユーザーをrequested_urlに転送します。それ以外の場合は、ログイン ページに送信します。
すぐにわかる問題の 1 つは、Mod_rewrite
ルールがすべてのリクエストをhandler.phpに送信することを考えると、無限ループを回避するにはどうすればよいかということです。
以外の方法でリダイレクトを行う必要がありheader("Location: ")
ますか?
編集:ここに私の闘争の更新があります:
最上位ドメイン (example.com)の.htaccessファイル内に次を追加しました。
#Prevent catching requests for the sub1 subdomain
RewriteCond %{REQUEST_URI} ^sub1\.example\.com
RewriteRule .* – [L]
次に、sub1.example.com サブドメインの .htaccess 内に、次を追加しました。
IndexIgnore *
RewriteEngine On
RewriteBase /path/to/base
#Avoid infinite loop on outgoing requests
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{REQUEST_URI} !^$
RewriteCond %{HTTP_REFERER} !^/?handler.php?$
RewriteCond %{REQUEST_URI} !^/?handler.php?$
#Check for cookie. Redirect to handler if not found. (not yet implemented)
#RewriteCond %{HTTP_COOKIE} !session_id
RewriteRule (.*)$ handler.php?requested_url=$1 [NC,L,QSA]
これがhandler.phpです
<?php
$url = $_REQUEST['requested_url'];
//Check list of permissions. For now just assume permitted.
$permitted = true;
if ($url == "") $url = "http://sub1.example.com";
if ($permitted)
header("Location: ".$url);
header("Location: http://sub1.example.com");
?>
私はそれを味わうことができるほど近いです。残念ながら、当分の間、ほぼすべての場所で「リダイレクト ループ」が発生しています。誰かが私に正しい方向への微調整を与えることができれば、私はそれを感謝します!