我需要读取URL中写的URL ..像这样:
http://example.com/user/http://google.com/?foo#bar
如果我使用:
RewriteRule ^([0-9A-Za-z_]+)/(.+)$ /dab.php?user=$1&url=$2 [L]
传递给$_GET["url"]
的网址变为:
http:/google.com/
我该如何解决?
答案 0 :(得分:2)
您需要使用%{THE_REQUEST}
来捕获此类数据,否则mod_rewrite会将//
剥离为/
中的单RewriteRule
。
请改用此规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+([^/]+)/([^\s]+)
RewriteRule ^ /dab.php?user=%1&url=%2 [R=302,L,NE,QSA]
PS:请记住,Apache只会在#
之前获取网址(由浏览器删除)。所以Apache将有这个剥离的URL:
http://example.com/user/http://google.com/?foo
<强>更新强>
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+([^/]+)/([0-9]+)/([0-9]+)/([^\s]+)
RewriteRule ^ /dab.php?user=%1&num1=%2&num2=%3&url=%4 [R=302,L,NE,QSA]