/ / Перенаправлення шляхів до підкаталогів у htaccess у будь-якому режимі - apache, .htaccess, mod-rewrite

Переадресація шляхів до підкаталоги у htaccess в будь-якому каталозі - apache, .htaccess, mod-rewrite

У Apache2 я хочу перенаправити деякі шляхи до вказаних каталогів, а всі інші до іншого dir, використовуючи htaccess.

Робоча конфігурація

У моєму корені Apache2 реж (/var/www/html) Я "структура":

/var/www/html
├── a
│   ├── aa.html
│   ├── .htaccess
│   └── index.html
├── b
│   ├── bb.html
│   └── index.html
├── .htaccess
└── index.html

Мій корінь .htaccess:

RewriteEngine On

# Redirect some paths to the /a
RewriteRule ^x(.*)$ /a/$1 [L]

# Redirect everything else to /b/

RewriteCond %{REQUEST_URI} !^/b/
RewriteRule ^(.*)$ /b/$1 [L]
# or
#RewriteRule !^b/ /b%{REQUEST_URI} [L]

І це добре працює:

Проблема

Тепер я хочу зробити саме такі переспрямовування, але починаючи з будь-якого підкаталогу, як корінь для моїх шляхів, наприклад, userdir на Linux.

Скажімо, я "структура":

/home/radzikowski/public_html/test
├── aa
│   ├── aa.html
│   ├── .htaccess
│   └── index.html
├── bb
│   └── index.html
├── .htaccess
└── index.html

Зараз:

Використовуючи той самий .htaccess, звичайно, намагаються використовувати файли з /var/www/html, наприклад http://localhost/~radzikowski/test/ перенаправлення (внутрішньо) на http://localhost/bb/ і намагається завантажити /var/www/html/bb/index.html.

Я спробував з BASE змінна, але без успіху. Наприклад це:

RewriteEngine On

RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::2$
RewriteRule ^(.*) - [E=BASE:%1]

RewriteCond %{REQUEST_URI} !^%{ENV:BASE}/bb/
RewriteRule ^(.*)$ %{ENV:BASE}/bb/$1 [L]

призводить до помилки HTTP 500, викликаної багатьма переадресаціями.

Питання

Як мій /home/radzikowski/public_html/test/.htaccess Файл повинен виглядати як перенаправлення заданих шляхів до підкаталогів?

Використання жорсткого коду RewriteBase не є опцією, ця конфігурація повинна бути незалежною від місця розташування.

Конфігурація переписання Apache mod не є проблемою, вона увімкнена для userdir (і має AllowOverride All)

Відповіді:

0 для відповіді № 1

Спробуйте ці 2 правила у своєму /test/.htaccess:

RewriteEngine On

# Redirect some paths to the /a
RewriteRule ^x(/.*)?$ a$1 [L,NC]

# Redirect everything else to /b/
RewriteRule !^b/ b%{REQUEST_URI} [L,NC]