перенаправление каталогов за немногим исключением с помощью .htaccess и mod_rewrite

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

До сих пор у меня есть это (с папкой ui, формами, clientsystem и проигнорированными виджетами)

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]

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

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

Другой вопрос, если я хочу запросы как'? 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]

Некоторое дублирование, но это работает.

1
задан Sebastiaan van den Broek 4 June 2010 в 09:35
поделиться

2 ответа

Что касается второй части вашего вопроса, сделайте флаги 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
ответ дан 3 September 2019 в 00:07
поделиться

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

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

Кстати, я считаю эту шпаргалку по mod_rewrite очень удобной: http://dreev.es/modrewrite .

1
ответ дан 3 September 2019 в 00:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: