2011-03-09 55 views
0

在我的网站上,我在访问页面表单内容时使用会话ID。通常不会显示url中的sessionid,因为它是通过jQuery .load访问的,因此URL不会更改。上面参考的页面需要被一些外部域直接访问。 我在表单页面的顶部使用了以下PHP来显示整个页面。使用.htaccess修剪网址查询字符串

<?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的错误,它可以't complete redirect

+0

http://briancray.com/2010/03/18/htaccess-hack-remove-url-query-strings/ – jcubic 2011-03-09 20:10:54

+0

“这将破坏任何功能THAT取决于查询字符串“ - 即时猜测这将是我正常使用的会话ID? – 2011-03-09 20:16:56

回答

1

你忘了换行

RewriteCond %{HTTP_REFERER} !aloweddomain.com [OR] 
RewriteCond %{QUERY_STRING} !=sessionid=XXXXX 
RewriteRule .* /desiredpage.php? [R=301,L] 

这将重定向不从aloweddomain.com出来,或者没有QUERY_STRING所有的URL。我忘记了[OR]如果还有[OR],那么这两个条件必须是真的。

如果desiredpage.php仅仅是表明你不能访问该网站页面,那么你可以把403如果您想从AJAX或自定义域称它为故宫,而不是重定向

RewriteRule .* - [F,L] 

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'); 
} 
+0

,这不会影响整个网站,只是该页面的权利?不工作,我只是得到一个FF消息“问题加载页...重定向以某种方式ff无法解决” – 2011-03-09 20:19:48

+0

如果我只是检查,看看它是一个xmlHTTPrequest(我的)或从允许的域?那会摆脱愚蠢的sessionid吧? – 2011-03-09 20:49:35

+0

你不能在.htaccess中检查自定义标题,但我把解决方案放在php中。 – jcubic 2011-03-09 21:16:38