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

Php 使用.htaccess修剪url查询字符串,php,apache,.htaccess,Php,Apache,.htaccess,在我的站点上,访问页面表单内容时使用会话id。url中的sessionid通常不会显示,因为它是通过jQuery.load访问的,所以url不会更改。上面引用的页面需要一些外部域直接访问。 我在表单页面的顶部使用了以下PHP来显示整个页面 <?php $code = $_GET['sessionid']; $referrer = $_SERVER['HTTP_REFERER']; if(strcmp( $code , 'XXXXX' ) !=0) { if

在我的站点上,访问页面表单内容时使用会话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");
        }
    }
?>
***编辑*** 使用此选项,填写适当的详细信息

RewriteCond %{HTTP_REFERER} !**aloweddomain.com** [OR]
RewriteCond %{QUERY_STRING} !=sessionid=**XXXXX**
RewriteRule .* /**desiredpage**.php? [R=301,L]
只需获取FF错误,它无法完成重定向

您忘记了换行符

RewriteCond %{HTTP_REFERER} !aloweddomain.com [OR]
RewriteCond %{QUERY_STRING} !=sessionid=XXXXX
RewriteRule .* /desiredpage.php? [R=301,L]
这将重定向所有不来自aloweddomain.com或没有查询字符串的url。我忘记了
[或]
,如果没有
[或]
,那么这两个条件必须为真

如果desiredpage.php只是一个显示您无法访问该站点的页面,那么您可以将403设置为禁止,而不是重定向

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

“这将破坏任何依赖于查询字符串的功能”-我猜这将是我对会话ID的正常使用?这不会影响整个网站,只是该页面,对吗?不,不工作,我只是收到一条FF消息“加载页面时出现问题…以FF无法解决的方式重定向”,如果我只是检查它是xmlHTTPrequest(我的)还是来自允许的域,怎么样?这将摆脱愚蠢的sessionid,对吗?您不能在.htaccess中检查自定义标题,但我将解决方案放在php中。但如果您在php脚本中放置重定向,则用户可以检查目标页面并正常访问它,并绕过您的检查。最好的方法是不要重定向到其他页面,而是在同一个文件中完成您的工作。@jcubic-real close now。我可以让它加载页面的唯一方法是将页面名称和扩展名添加到“/domain.com/page.php”警告:preg_match()[function.preg match]:第2行/home/xxx/public_html/desiredpage.php中未知的修饰符“d”警告:无法修改标题信息-标题已由(输出从/home/xxx/public_html/desiredpage.php:2开始)在第8行的/home/xxx/public_html/desiredpage.php中
if (!(preg_match('/domain.com/', $_SERVER['HTTP_REFERER']) ||
    $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')) {
   header('Location: http://www.mydomain.com/otherpage.php');
}