在我的网站上,我在访问页面内容时使用会话ID。 url中的sessionid通常不会显示,因为它是通过jQuery .load访问的,因此url不会更改。上面引用的页面需要由一些外部域直接访问。 我在表单页面的顶部使用了以下PHP来显示整个页面。
<?php
$code = $_GET['sessionid'];
$referrer = $_SERVER['HTTP_REFERER'];
if(strcmp( $code , 'XXXXX' ) !=0) {
if (preg_match("/alloweddomain.com/",$referrer)) {
header('Location: http://www.mydomain.com/desiredpage.php?sessionid=XXXXX');
} else {
header("Location: http://www.mydomain.com/otherpage.php");
}
}
?>
有没有办法用.htaccess删除会话ID?我尝试过以下操作但得到500个内部服务器错误。
RewriteEngine On
RewriteBase /
"lots of 301 redirects"
HTTP_REFERER variable RewriteCond %{HTTP_REFERER} !aloweddomain.com RewriteCond %{QUERY_STRING} !="sessionid=XXXXX" RewriteRule .* /desiredpage.php? [R=301,L]
的 的 *** 修改的 * ** * 使用这个,填写适当的细节
RewriteCond %{HTTP_REFERER} !**aloweddomain.com** [OR]
RewriteCond %{QUERY_STRING} !=sessionid=**XXXXX**
RewriteRule .* /**desiredpage**.php? [R=301,L]
只是得到FF错误,它无法完成重定向
答案 0 :(得分:1)
你忘记换行了
RewriteCond %{HTTP_REFERER} !aloweddomain.com [OR]
RewriteCond %{QUERY_STRING} !=sessionid=XXXXX
RewriteRule .* /desiredpage.php? [R=301,L]
这将重定向所有不是来自aloweddomain.com或没有Query_String的网址。如果有[OR]
,我会忘记[OR]
,那么这两个条件必须为真。
如果desiredpage.php只是显示您无法访问该网站的页面,那么您可以将403 Forbidden而不是重定向
RewriteRule .* - [F,L]
如果您想从AJAX或自定义域中调用它。
if (preg_match('/domain.com/', $_SERVER['HTTP_REFERER']) ||
$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
// allowed
header('Location: http://www.mydomain.com/desiredpage.php');
} else {
// not allowed
header('Location: http://www.mydomain.com/otherpage.php');
}
desiredpage.php
if (!(preg_match('/domain.com/', $_SERVER['HTTP_REFERER']) ||
$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')) {
header('Location: http://www.mydomain.com/otherpage.php');
}