1

我需要阅读写在 URL 中的 URL .. 像这样:

http://example.com/user/http://google.com/?foo#bar

如果我使用:

RewriteRule ^([0-9A-Za-z_]+)/(.+)$ /dab.php?user=$1&url=$2 [L]

传递给的 URL$_GET["url"]变为:

http:/google.com/

我该如何解决?

4

1 回答 1

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 只会在之前获取 URL #(被浏览器剥离)。所以 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]
于 2013-09-20T18:34:54.377 回答