需要php脚本来重写URL查询字符串

时间:2011-07-27 02:37:24

标签: php .htaccess

我有一个奇怪的网址请求到我的网站..可能来自机器人或其他网站..  我已经研究了我在网络上的所有代码和链接..但没有找到和这样的链接 他们要求的网址不正确的是:

/modules.php?file=article&name=News&sid=281737

但正确的应该是

/modules.php?name=News&file=article&sid=281737
事实上,php可以处理这两个......但我使用的是静态缓存系统,它在缓存上生成两个文件。制作大量文件不利于网络性能。

我需要一个使用$ _SERVER ['REQUEST_URI']和正则表达式检测错误网址的php脚本 然后使用301标题

将其发送到正确的网址

感谢您的任何建议。

2 个答案:

答案 0 :(得分:2)

在Web服务器级别执行此操作。由于您标记了您的问题.htaccess,我认为这是Apache。

RewriteEngine On
RewriteCond %{QUERY_STRING} file=(.*)&name=(.*)&sid=(.*)
RewriteRule modules.php modules.php?name=%2&file=%1&sid=%3 [R=301,L]

我没有测试过,它有用吗?

答案 1 :(得分:0)

你可以尝试这样的事情 -

<?php

if (preg_match ('/file=article\&name=Name/', $_SERVER['REQUEST_URI'])) {
    header ('HTTP/1.1 301 Moved Permanently');
    header ('Location: ' . str_replace('file=article&name=Name', 'name=Name&file=article', $_SERVER['REQUEST_URI']);
}

或更通用的

<?php

if (preg_match ('/file=(.*)\&name=(.*)/', $_SERVER['REQUEST_URI'], $matches)) {
    header ('HTTP/1.1 301 Moved Permanently');
    header ('Location: ' . preg_replace('/file=(.*)&name=([^&]*)/', 'file=${1}\&name=${2}', $_SERVER['REQUEST_URI']));
}