2009-10-24 2 views
0
RewriteCond %{REQUEST_URI} !^/?new.php?url 
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$0 [L] 

его должны принимать какие-либо URL-адресПочему это неправильно переписывает URL?

mysite.com/someurl 

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

new.php?url=someurl 

однако он продолжает идти только new.php

+0

Возможные дубликаты: http://stackoverflow.com/questions/1616719/need-a-regex-to-match-url-without-http-https-ftp, http://stackoverflow.com/questions/1616770/помощь переписывания-это-URL-проста, но не работоспособный – Gumbo

ответ

0

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

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

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

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

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

2

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

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

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

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

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

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

Объяснение:

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

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

Смежные вопросы