почему это не переписать URL-адрес должным образом? - PullRequest
0 голосов
/ 24 октября 2009
RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$0 [L]

должен принимать любой URL

mysite.com/someurl

и преобразовать его в

new.php?url=someurl

однако он продолжает идти только к новому.

Ответы [ 3 ]

2 голосов
/ 24 октября 2009

Вам нужно экранировать второй вопросительный знак в первой строке, чтобы он совпадал с буквальным вопросительным знаком:

RewriteCond %{REQUEST_URI} !^/?new.php\?url

Также вы не используете заключенные в скобки группы во второй строке.$0 хорошо, или вы можете вместо этого $1.Если вы используете $0, вы можете упростить его:

RewriteRule ^.*$ new.php?url=$0 [L]

Или, с другой стороны, если вы разбиваете URL-адрес по какой-либо причине, я бы предложил исправить ситуацию.Вы не соответствуете имени файла и расширению точно.Немного более сложное регулярное выражение, как это, вероятно, поможет вам:

RewriteRule ^/?(.*?)(?:\.([^.]*))?$ new.php?path=$1&extension=$2 [L]

Объяснение:

  1. (.*?) соответствует каталогу и имени файла.? означает совпадение без жадности, поэтому остановитесь, как только совпадет следующая часть.Скобки приводят к его захвату и сохранению в $1.

  2. (?:\.([^.]*))? соответствует расширению файла.?: витков говорит не захватывать внешний набор скобок, поэтому точка не фиксируется в $2.([^.]*) соответствует расширению и гарантирует, что оно не содержит точку.Последний ? делает часть расширения файла необязательной, поскольку не все URL-адреса имеют расширения.Таким образом, будет $2 только при наличии расширения файла.

0 голосов
/ 24 октября 2009

Первая обратная ссылка должна быть $ 1 вместо $ 0.

RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L]

Это также зависит от того, какие другие строки кода у вас есть в файле. Также возможно испортить переписывание, если у вас есть другой код, конфликтующий с ним.

0 голосов
/ 24 октября 2009

Первая обратная ссылка: $1, а не $0 AFAIK. Если этого не происходит, попробуйте также указать [QSA], хотя я сомневаюсь, что это так.

RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L]
...