нужно переписать ЛЮБОЙ символ (@ #% ^ & *! /) - PullRequest
0 голосов
/ 24 октября 2009
RewriteRule ^[^/.]*$ new/$0

каждый раз, когда я печатаю mydomain.com/somepath/to/somewhere он выбрасывает 404

его предполагается перевести на: mydomain.com/new/somepath/to/somewhere

Ответы [ 2 ]

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

Требуется ли вам начальная косая черта или нет, зависит от того, делаете ли вы это в файле httpd.conf или в .htaccess, или в контейнере внутри httpd.conf.

Чтобы избежать циклов перезаписи, вы захотите использовать RewriteCond, чтобы убедиться, что вы не соответствуете новым /

Не уверены, что синтаксис $ 0 работает без захвата скобок?

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

Давайте разберем ваше правило очень быстро:

Якорь в начале, соответствующий всему, что не является символом или нет, 0 или более раз, якорь в конце.

Другими словами, он никогда не будет ничего соответствовать, потому что . соответствует чему-либо (и, следовательно, [^.] ничего не соответствует).

Я думаю, вы имели в виду:

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

Это читается
Привязка в начале, совпадающая с 0 или 1 /, за которой следует 1 или более символов (сохраняя это совпадение для более позднего), привязка в конце.

(RewriteCond предотвращает перезапись вещей в каталоге / new /, согласно ответу Девина Чеертаса. [L] предотвращает любые дальнейшие перенаправления)

...