大家好,提前谢谢,我正在尝试添加一个网址作为参数,但我不能。 我的规则是:
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
我希望你的帮助谢谢
答案 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请求?
它可能有用,可能不会,如果域名发生变化,则无需更新任何内容。
希望这有帮助。