我犯了一个小错误(我在现有的php调用中启动了一个新的php调用 - oops)并设法让google开始抓取一堆看起来像这样的URL:
http://www.mydomain.com/folder/parameter/%3C/?php%20echo%20writelink();%20?%3E
我已经修复了采购电话,但是我试图让.htaccess重新打开页面调用
http://www.mydomain.com/folder/parameter/
没有成功。
我尝试了以下内容:
RewriteRule ^folder/(.*)/(.*)%(.*) /folder/$1/ [NE,R=301,L]
RewriteRule ^folder/(.*)/(.*)3C/?php /folder/$1/ [R=301,L]
RewriteRule ^folder/(.*)/(.*)writelink /folder/$1/ [R=301,L]
RewriteRule ^folder/(.*)/([^/.]+)writelink /folder/$1/ [R=301,L]
但他们所有人都回归403。 我将测试重写文件作为文件中的第一个重写文件,因此它不被其他东西篡夺。
(作为参考,当我没有弄乱页面时,正确的重写是 RewriteRule ^文件夹/(.*)/$/content/element.php?param=$1 [L] )
我之前在路径上有%年龄问题,但这次我决定打败它 - 有什么建议吗?
答案 0 :(得分:1)
您的网址是这样的:
http://www.mydomain.com/folder/parameter/</?php echo writelink(); ?>
没有编码。
304代码并不真正表示错误,它表示自上次访问或缓存后所请求URL的资源未发生更改。清除浏览器的缓存并确保清除它。
由于初始字符< (%3C)
,错误应为403(禁止)。
这些错误使得.htaccess中的任何重写规则都无用。处理此类问题的一种方法是使用脚本。
示例强>
将这些行添加到根目录下的.htaccess文件中:
Options +FollowSymlinks -MultiViews
ErrorDocument 403 /Error403.php
在根目录下创建Error403.php,内容与此类似:
<?php
// The following lines should be at the top of the file
/**************Only for Debugging**********************/
echo $_SERVER[ 'REDIRECT_QUERY_STRING' ] . "<br /><br />";
echo var_dump($_REQUEST) . "<br /><br />";
/*=====================================================
NOTE: A Header error might be generated while the above
code is active. Use it only to display the incoming
parameters and delete it for normal operation.
*******************************************************/
if ( isset ( $_SERVER[ 'REDIRECT_QUERY_STRING' ] ) ) {
$QueryString = $_SERVER[ 'REDIRECT_QUERY_STRING' ]; // The query looks like this: php%20echo%20writelink();%20?%3E
// Check if it is the wrong URL
if ( preg_match( '|php%20echo%20writelink()|i', $QueryString ) ) {
header("Location: http://www.mydomain.com/folder/parameter/");
}
}
// Handle other errors
?>
在这种特定情况下,我们利用字符串包含问号?
这一事实,使其看起来像一个查询。因此,我们尝试将查询内容与preg_match()
匹配。
应该这样做。如有必要,相应地修改链接,这只是一个如何操作的示例。