【问题标题】:trim url query string with .htaccess使用 .htaccess 修剪 url 查询字符串
【发布时间】:2011-03-09 20:07:12
【问题描述】:

在我的网站上,我在访问页面表单内容时使用会话 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错误

【问题讨论】:

标签: php apache .htaccess


【解决方案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 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');
}

【讨论】:

  • 这不会影响整个网站,只是那个页面,对吗?不行不行,我只收到一条 FF 消息“加载页面时出现问题...以 ff 无法解决的方式重定向”
  • 如果我只是检查它是 xmlHTTPrequest(我的)还是来自允许的域呢?那会摆脱愚蠢的 sessionid 对吗?
  • 您无法在 .htaccess 中检查自定义标头,但我将解决方案放在 php 中。
  • 但是如果你把重定向放在 php 脚本中,那么用户可以检查目标页面并正常访问它并绕过你的检查。最好的方法是不要重定向到其他页面,而是在同一个文件中做你的事情。
  • @jcubic - 现在真的关闭了。我可以让它加载页面的唯一方法是将页面名称和扩展名添加到'/domain.com/page.php'警告:preg_match()[function.preg-match]:/home中的未知修饰符'd'第 2 行的 /xxx/public_html/desiredpage.php 警告:无法修改标头信息 - 标头已由 /home/xxx/public_html/desiredpage.php 中的(输出开始于 /home/xxx/public_html/desiredpage.php:2)发送8号线
猜你喜欢
  • 2012-01-29
  • 2021-04-30
  • 1970-01-01
  • 2012-11-15
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多