URL-адрес htaccess в качестве параметра - PullRequest
1 голос
/ 01 апреля 2011

Привет всем и заранее спасибо, я пытаюсь добавить URL в качестве параметра, но не могу.Мое правило:

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 ]

2 голосов
/ 01 апреля 2011

Это называется жадным соответствием ... "звездочка" совпадает столько, сколько может, и затем возвращается. Вместо этого используйте [^ /], который будет соответствовать следующему слешу.

1 голос
/ 01 апреля 2011

http://localhost/example/info/peter/hi/guy/http://www.example.com не является действительным URL-адресом для того, что вы пытаетесь сделать.Часть URL должна быть закодирована.См., Например, это объяснение .

Правильный URL-адрес будет:

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

Несмотря на это, ошибка с вашим регулярным выражением является жадным соответствием, как описано в другомответ.Однако, если вы правильно закодировали URL, это не будет проблемой.

1 голос
/ 01 апреля 2011
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]

[^/] означает «любой символ, который не является косой чертой». Естественно, это означает, что «текст» не может содержать косые черты, но ваш URL будет соответствовать правильно.

Также обратите внимание на [B], который является одним из многих параметров, которые вы можете добавить к правилу перезаписи. [B] означает, что любые & s и некоторые другие символы будут экранированы. Таким образом, если URL-адрес, являющийся параметром, содержит строку запроса, его можно прочитать в $_GET['url'], где в противном случае его параметры интерпретируются как часть новой строки запроса.

0 голосов
/ 01 апреля 2011

Не моя область знаний, но почему бы не использовать запрос $ _SERVER для URL?

Может работать, может и нет, и если домен когда-либо изменится, обновлять его не нужно.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...