【发布时间】:2016-10-16 22:33:54
【问题描述】:
嗨,
是否可以在 PHP 脚本和 .htaccess 之间共享信息? 我正在试验 $_ENV,但没有让它工作。
我想做什么:
创建登录系统。对于每个 html 请求,.htaccess 正在调用(通过重写规则)一个 php 并将原始 url 作为参数传递。PHP 正在测试用户是否已登录。如果没有:转到登录页面,如果是:允许访问请求的 URL。我用 php "header($url)" 做的。
问题:这总是会启动一个循环,因为 PHP 脚本在记录测试成功后会请求原始 url,而在 .htaccess 中通过调用 PHP-Script 再次处理。
我的想法:有没有办法在 PHP 中设置一个变量,我可以在 .htaccess-condition 中访问它?这是一种安全的方式吗?
更新:
根据要求,这里是我的代码。
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]
感谢您的帮助!!
【问题讨论】:
-
发布您的代码。我猜这是您的 PHP 中的逻辑错误,而不是 htaccess 问题。您永远不需要在两者之间“共享”
标签: php .htaccess mod-rewrite