Псевдоним Apache/перезапись в подкаталог без перенаправления

Например, я получаю доступ к проекту foo в https://localhost/projects/foo/dev/.

Я хочу переписать URL-адрес так, чтобы https://localhost/projects/foo/ указывал на projects/foo/dev/ в моей папке DocumentRoot.

Это не должно быть перенаправлением HTTP 3xx. Кроме того, dev1, dev2 и т. д. не должны быть доступны (если только внутри dev нет каталогов с такими именами, но это маловероятно). Конечно, остальную часть пути, а также строки запроса и фрагменты необходимо сохранить, например:

projects/foo/dev/assets/js/jquery.min.js -> https://localhost/projects/foo/assets/js/jquery.min.js

Это моя структура каталогов в моей папке DocumentRoot:

  • projects/
    • foo/
      • dev/
      • dev1/
      • dev2/
      • dev3/
    • bar/
      • dev/
      • dev1/
      • dev2/
    • и так далее...

Я попробовал ответ, размещенный в этот вопрос, но он не принимает эффект даже после перезапуска Apache.

Я также пробовал это, что кажется правильным, но дает мне HTTP 500 с некоторой ошибкой бесконечного перенаправления в error.log:

RewriteEngine on
RewriteRule ^(.*)$ src/$1 [L,QSA]

У меня есть доступ только внутри каждого каталога проекта (например, foo и bar), и родительский каталог не может называться projects на других машинах. Поэтому это нужно делать в файлах htaccess, а не в httpd.conf.


person rink.attendant.6    schedule 15.10.2015    source источник


Ответы (1)


Вы можете использовать в своем projects/.htaccess:

RewriteEngine on
RewriteCond $2 !^dev/ [NC]
RewriteRule ^(foo|bar)/(.*)$ $1/dev/$2 [NC,L]

Или для каждого каталога в projects/ (не только fooи bar):

RewriteEngine on
RewriteCond $2 !^dev/ [NC]
RewriteRule ^([^/]+)/(.*)$ $1/dev/$2 [L]
person Croises    schedule 15.10.2015