2016-10-16 11 views
0

こんにちは、.htaccessとphpの間で情報を共有することはできますか?

PHPスクリプトと.htaccessの間で情報を共有することは可能ですか? 私は$ _ENVを実験していましたが、うまく動作しませんでした。

私がしたいこと:

ログインシステムの作成。すべてのHTMLリクエストに対して、.htaccessはPHPを書き換えルールで呼び出して、元のurlをパラメータとして渡します。PHPがユーザにログインしているかどうかテストしています。そうでない場合:ログインページに移動します。要求されたURL私はPHPの "header($ url)"を使っていました。

問題:PHPスクリプトはログテストが成功した後、PHPスクリプトを呼び出すことによって.htaccessで再度処理される元のURLを要求しているため、常にループを開始します。

私の考え:.htaccess-conditionでアクセスできるPHPで変数を設定する方法はありますか?それは安全な方法ですか?

更新:

として私のコードここでは、を求めました。

PHP:

session_start(); 
$sOriginUrl = $_GET["url"]; 

if(!$sOriginUrl){ 
    return false; 
} 

if($_SESSION["userName"]) { 
    if($_SESSION["userName"] !== null){ 
    header("Location: " . $sOriginUrl, TRUE, 301); 
} 
else { 
    $aTokenizedOriginalUrl = explode("/", $sOriginUrl); 
    $sLoginUrl = "/"; 
    for($i=0, $il=count($aTokenizedOriginalUrl); $i<($il-1); $i++) { 
     $sLoginUrl = $sLoginUrl . $aTokenizedOriginalUrl[$i] . "/"; 
    } 
    header("Location: //myurl.de/" . $sLoginUrl); 
} 
} 
else { 
    $aTokenizedOriginalUrl = explode("/", $sOriginUrl); 
    $sLoginUrl = "/"; 
    for($i=0, $il=count($aTokenizedOriginalUrl); $i<($il-1); $i++) { 
     $sLoginUrl = $sLoginUrl . $aTokenizedOriginalUrl[$i] . "/"; 
    } 
    $_ENV["HTTP_user_logged"]="true"; 
    header("Location: //myurl.de/" . $sLoginUrl); 
} 

.htaccessファイル:任意の助け

RewriteEngine on 

# This prevents the rewrite engine from looping 
RewriteCond %{ENV:HTTP_user_logged} true 
#RewriteCond %{forced_responsecode} 301 
RewriteRule^- [L] 

#RewriteCond %{ENV:REDIRECT_STATUS} !="" 
RewriteCond %{HTTP_REFERER} !^/myurl.de/basics/validate-user-login-for-url.php$ 
RewriteCond %{REQUEST_URI} !^(/.*)/$ 
RewriteCond %{REQUEST_URI} !^(/.*)/index.html$ 
RewriteRule ^(.*\.html)$ /myurl.de/basics/validate-user-login-for-url.php?url=%{REQUEST_URI}&ref=%{HTTP_REFERER} [L,QSA] 

感謝!!

+0

コードを投稿してください。私はそれがhtaccessの問題ではなく、あなたのPHPの論理的なエラーだと思います。あなたは2つの間で "共有"する必要はありません –

答えて

1

ではありません。 PHPはの前にがチェックされているので、.htaccessと情報を共有できないので、ワークフローは "req - > .htaccess-> php; req-> .htaccess-> php"ですが、リクエストはクッキーであり、クッキーにログイン状態を保存するのに安全ではないので、セッションを使用する必要があり、PHPセッションは.htaccessで利用できません。

私の提案するソリューションは、 check_auth.phpにはログインページが含まれていて、ログインしていなければexit()することができます。最初に呼び出されたスクリプトが実行を継続することを意味します。

これが役立つことを願っています。歓声

+0

OK。はい、私の知るとおり、あなたの答えは本当に役立ちます。問題を解決するための私のやり方は理にかなっていません。そのために私の時間を無駄にする必要はありません:)解決策を提案してくれてありがとう!!不幸にも、私は.htmlファイルやその他のものをチェックする必要があるので、私にとってはうまくいきませんが、.phpファイルは決してtesting-phpを含むことができません。他のアイデアやリファレンスはありますか?ありがとう! –

+0

私は他にはあまりありませんが、私が言及したようなクッキーベースのソリューションについては[これ](http://stackoverflow.com/questions/14066697/php-and-htaccess-authentication-solution)をチェックしてください**これは**安全ではないことを覚えておいてください(ユーザーごとにアクセスを制御することはできません)。たぶんそれで十分でしょう。 – Johnny

+0

ええ、ありがとうございますが、実際には保存されていないので使用できません。 –

関連する問題