我需要阅读写在 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/
我该如何解决?
我需要阅读写在 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/
我该如何解决?
您需要使用%{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]