перенаправление каталогов с несколькими исключениями с использованием .htaccess и mod_rewrite - PullRequest
1 голос
/ 02 июня 2010

Я использую mod_rewrite в файле настроек ManagedFusion (аналогично .htaccess) и хочу пересылать все входящие запросы на другой порт на сервере, за исключением нескольких папок.

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

RewriteEngine On  

RewriteCond %{REQUEST_URI} !ui$
RewriteCond %{REQUEST_URI} !forms$
RewriteCond %{REQUEST_URI} !clientsystem$
RewriteCond %{REQUEST_URI} !widgets$
RewriteRule ^/(.*) http://localhost:8050/$1 [P,L]

Это прекрасно работает, пока эти каталоги исключений не существуют, однако, когда они создаются, перезаписывающий механизм просто сработает снова, и в этом случае он будет соответствовать правилу, тем самым перенаправив меня на другой порт.

Как я мог решить это?

Еще один вопрос, если я хочу, чтобы запросы вроде '? File = bla' также переадресовывались, будет ли это просто работать так?

Редактировать: вот чем я закончил:

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^ui
RewriteCond $1 !^forms
RewriteCond $1 !^clientsystem
RewriteCond $1 !^widgets
RewriteRule ^/?(.*) http://localhost:8050/$1?%1 [P,L,R]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^ui
RewriteCond $1 !^forms
RewriteCond $1 !^clientsystem
RewriteCond $1 !^widgets
RewriteRule ^/?(.*) http://localhost:8050/$1 [P,R]

Некоторая избыточность, но она работает.

Ответы [ 2 ]

1 голос
/ 02 июня 2010

Что касается второй части вашего вопроса, сделайте флаги RewriteRule так: [P,L,QSA]. QSA расшифровывается как Query String Append и будет делать очевидное для вашей последней строки до того, как произойдет перенаправление.

Кстати, вы, скорее всего, захотите включить R во флаги, так как это действительно перенаправит клиента на новый URL.

Обновление: теперь я понимаю, что вы хотите пропустить эти каталоги в любом случае?

Если это так, то вы можете использовать

RewriteCond $1 !^ui
RewriteCond $1 !^forms
...
RewriteRule ^/(.*) http://localhost:8050/$1 [P,L,QSA]

, который просто не будет соответствовать и не перенаправлять пользователя в случае, если запрашиваемый URL-адрес начинается с какой-либо из указанных строк.

1 голос
/ 02 июня 2010

Попробуйте добавить это, чтобы применить правило, только если файл или каталог с таким именем не существует:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Кстати, этот чит-лист mod_rewrite очень удобен: http://dreev.es/modrewrite.

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