RewriteRule перенаправить все, кроме одной папки - PullRequest
6 голосов
/ 26 августа 2011

Я не очень хорош с mod_rewrite, но он мне действительно нужен сейчас.

У меня полностью новый веб-сайт в папке site.Так что если вам нужно перейти на новый веб-сайт, URL будет выглядеть как http://domain.com/site/....Теперь мне нужно исключить site из URL, но все равно указать на /site/, КРОМЕ для одной папки с именем upload.Как я могу это сделать?

Так что http://domain.com/anything.ext и http://domain.com/anyfolder будут указывать на http://domain.com/site/... за исключением domain.com/upload, который все еще указывает на domain.com/upload.

Тогда еще один вопрос, этоПредположим, это хорошо только для временного решения или не имеет значения (если подумать о скорости и эффективности)?

1 Ответ

10 голосов
/ 26 августа 2011

(Предполагая, что вы помещаете правила в файл .htaccess в корне документа), используйте это:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^upload
RewriteRule (.*) site/$1 [L]

Если вы помещаете его в httpd.conf, вам нужно немного его изменить:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/upload
RewriteRule (.*) /site$1 [L]

Что касается второго вопроса, мне лично не нравится mod_rewrite, и я определенно не буду использовать его в качестве постоянного решения, если вам абсолютно не нужно. Это потому, что mod_rewrite довольно неэффективен, особенно на загруженных серверах, потому что он должен выполнять хотя бы одно регулярное выражение для каждого входящего запроса. Вы всегда должны использовать флаг [L], чтобы гарантировать, что обработано не больше правил, чем необходимо.

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

Я уверен, что вы уже знаете это, но здесь - это документация mod_rewrite.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...