重写规则以捕获URL

时间:2013-09-20 18:29:47

标签: apache .htaccess mod-rewrite

我需要读取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/

我该如何解决?

1 个答案:

答案 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]