У 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]
І це добре працює:
- root index.html ніколи не відображається,
- http://localhost/x відображає / index.html
- http://localhost/x/aa.html відображає a / aa.html
- http://localhost/x/a/b/c/ обробляється через / .htaccess
- http://localhost/ відображає b / index.html
- http://localhost/bb.html відображає b / bb.html
Проблема
Тепер я хочу зробити саме такі переспрямовування, але починаючи з будь-якого підкаталогу, як корінь для моїх шляхів, наприклад, userdir на Linux.
Скажімо, я "структура":
/home/radzikowski/public_html/test
├── aa
│ ├── aa.html
│ ├── .htaccess
│ └── index.html
├── bb
│ └── index.html
├── .htaccess
└── index.html
Зараз:
- http://localhost/~radzikowski/test/x має відображати aa / index.html
- http://localhost/~radzikowski/test/x/aa.html відображає aa / aa.html
- http://localhost/~radzikowski/test/x/a/b/c/ слід обробляти aa / .htaccess
- http://localhost/~radzikowski/test/ має відображати bb / index.html
- http://localhost/~radzikowski/test/bb.html має відображати bb / bb.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]