使用.htaccess修剪url查询字符串

时间:2011-03-09 20:07:12

标签: php apache .htaccess

在我的网站上,我在访问页面内容时使用会话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错误,它无法完成重定向

1 个答案:

答案 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');
}