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