Вам нужно бежать второй знак вопроса в первой строке, так что соответствует дословный знак вопроса:
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
.
(?:\.([^.]*))?
соответствует расширению файла. ?:
говорит, что не фиксирует внешний набор круглых скобок, поэтому точка не фиксируется в $2
. ([^.]*)
соответствует расширению и гарантирует, что он не содержит точки. Финал ?
делает часть расширения файла необязательной, просто причиной того, что не все URL-адреса имеют расширения файлов. Таким образом, будет только $2
, если есть расширение файла.
Возможные дубликаты: http://stackoverflow.com/questions/1616719/need-a-regex-to-match-url-without-http-https-ftp, http://stackoverflow.com/questions/1616770/помощь переписывания-это-URL-проста, но не работоспособный – Gumbo