htaccess url作为参数

时间:2011-04-01 12:49:59

标签: apache .htaccess mod-rewrite

大家好,提前谢谢,我正在尝试添加一个网址作为参数,但我不能。 我的规则是:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule ^info/([a-zA-Z0-9|]+)/(.*)/(.*)$ info.php?user=$1&text=$2&url=$3

在浏览器中: http://localhost/example/info/peter/hi guy/http://www.example.com

返回数组$_GET php

[user] => peter
[text] => hi guy / http:
[url] => www.example.com

什么是正确的:

[user] => peter
[text] => hi guy
[url] => http://www.example.com

我希望你的帮助谢谢

4 个答案:

答案 0 :(得分:2)

它被称为贪婪匹配......“点星号”尽可能匹配&然后回溯。而是使用[^ /],它将匹配下一个斜杠。

答案 1 :(得分:1)

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule ^info/([a-zA-Z0-9|]+)/([^/]*)/(.*)$ info.php?user=$1&text=$2&url=$3 [B,QSA]

[^/]表示“任何不是斜线的角色”。当然,这意味着“text”不能包含任何斜杠,但您的URL将被正确匹配。

另请注意[B],这是您可以添加到重写规则的众多选项之一。 [B]表示任何&和其他一些字符都将被转义。因此,如果您作为参数的URL具有查询字符串,则可以在$_GET['url']中读取它,否则其参数将作为新查询字符串的一部分进行解释。

答案 2 :(得分:1)

http://localhost/example/info/peter/hi/guy/http://www.example.com不是您尝试执行的操作的有效网址。 URL部分应该是urlencoded。例如,请参阅this explanation

正确的网址是:

http://localhost/example/info/peter/hi/guy/http%3A%2F%2Fwww.example.com

尽管如此,正如另一个答案所述,你的正则表达式的错误是贪婪的匹配。但是,如果您正确编码了URL,则不会出现问题。

答案 3 :(得分:0)

不是我的专业领域,但为什么不对网址使用$ _SERVER请求?

它可能有用,可能不会,如果域名发生变化,则无需更新任何内容。

希望这有帮助。