Я пытаюсь записать файл htaccess, выполняет аутентификацию и перенаправляет аутентифицированных пользователей в авторизованные каталоги. Может кто-нибудь помочь мне с синтаксисом условия?
Это то, что у меня есть, но я не могу правильно получить RewriteCond и RewriteRule.
RewriteEngine On
RewriteCond %{LA-U:REMOTE_USER} (\d{3})$
RewriteRule !^%1 http://subdomain.mydomain.com/%1 [R,L].
AuthName "My Domain Protected Area"
AuthType Basic
AuthUserFile /path/to/my/.htpasswd
Require valid-user
Это то, что я имею в виду ReWriteCond and RewriteRule
сказать:
"Если REMOTE_USER имеет имя пользователя, оканчивающееся 3 цифрами, захватите три совпадающие цифры и для любого URL, к которому они пытаются получить доступ, если он не начинается с захваченных 3 цифр, затем перенаправьте их в подкаталог с именем, равным захватил три цифры ".
Другими словами, если пользователь с именем "johnny202" аутентифицирован, то, если он запрашивает какой-либо каталог, кроме http://subdomain.mydomain.com/202/ то он должен быть перенаправлен на http://subdomain.mydomain.com/202/
Единственное, что я могу думать о том, что это неправильно, это первый экземпляр "%1".
1 ответ
Что следует помнить с mod_rewrite - он соответствует правилу перед просмотром условий, поэтому во время проверки шаблона правила он не выполнил ни одного из условий и еще не настроил обратную ссылку%1. Я бы попробовал разделить проверку URL на второе условие - что-то вроде следующего
RewriteCond %{REMOTE_USER} ([0-9]{3})$
RewriteCond %{REQUEST_URI} !^/%1
RewriteRule ^.*$ http://subdomain.mydomain.com/%1 [R,L].
Таким образом, правило будет соответствовать каждому запросу, поэтому условия всегда будут проверяться, но перенаправление должно происходить только тогда, когда запрос не начинается с "правильного" номера.
Nb Я вынул LA-U в первом условии - насколько я понимаю, он вам не нужен, если он находится в файле.htaccess (только если перезапись находится в основном конфиге Apache).