Назад | Перейти на главную страницу

.htaccess Mod_Rewrite при перемещении содержимого корневого веб-каталога в подкаталоги?

Я очищаю и переставляю файлы на своем сервере (базовая ситуация с общим хостингом) и копаюсь в .htaccess, чтобы сделать это. Я перемещаю содержимое, которое у меня было в моем корневом веб-каталоге, в подкаталог / design / v5 / и пытаюсь использовать RewriteRule и RedirectMatch для работы следующих двух сценариев:

#-------------------------
#Redirect root url to subdirectory
#   1.  Visits: DOMAIN.TLD/*
#       Served: DOMAIN.TLD/design/v5/*
#
#   2.  Visits: DOMAIN.TLD/design/v5/*
#       Redirected: DOMAIN.TLD/*
#-------------------------

RewriteRule ^/(.*)$ /design/v5/$1 [L,R]
RedirectMatch 301 ^/design/v5/(.*)$ /(.*)$1

Как вы, профессионалы Apache, видите, я что-то делаю плохо, но мне трудно понять, где и как (читаю много справочных материалов по аналогичным вопросам здесь и на других сайтах на данный момент ... мы, дизайнер / фронтенд-ребята могут быть довольно плотными).

Есть еще две вещи, которые я хотел бы здесь сделать дополнительно:

  1. Сохранять относительные URL-адреса в моем коде
  2. Сделайте каскад перенаправления / перезаписи в собственные подкаталоги / design / v5 /.
  3. Если бы я мог сгруппировать эти подкаталоги вместе в скобках, например (включает | img | scripts | style) или заставить все работать с подстановочным знаком вместо написания отдельных наборов правил ReWrite / Redirect, это было бы фантастически.
  4. Не иметь эффекта перезаписи в других подкаталогах (например, DOMAIN.TLD / lawlz / imonaboat.gif по-прежнему будет работать так, как написано и не будет направляться из / design / v5 /).

На данный момент, когда я возился с базовой настройкой, я получил один из трех результатов:

  1. Пустой список индексных каталогов моего корневого веб-сайта,
  2. Страница ошибки сервера в моем корневом веб-сайте,
  3. Страница ошибки браузера из искаженной версии корневого веб-сайта: http: //domain.tld/(.) / (.) / (.) / (.) / (.) / (.) ...

Позднее ночное обновление:

Этот SO-ответ отлично работает на корневом уровне, однако не перенаправляет из подкаталога [когда я перехожу к DOMAIN.TLD / design / v5, я вместо этого получаю перенаправление на DOMAIN.TLD /(.*)] и искажает любые каталоги, не являющиеся субдоменами, для тяжелой перезаписи правило.

RewriteCond %{THE_REQUEST} ^GET\ /design/comingsoon/
RewriteRule ^design/comingsoon/(.*) /$1 [L,R=301]
RewriteRule !^design/comingsoon/ design/comingsoon%{REQUEST_URI} [L]

! не допускается в rewriterule.

RewriteCond %{THE_REQUEST} ^GET\ /design/comingsoon/
RewriteRule ^design/comingsoon/(.*) /$1 [L,R=301]
RewriteRule ^design/comingsoon/ - [L]
#rewrite to '-' doesn't do anything, but with the L flag the rule(s) below it will never be applied
RewriteRule (.*) design/comingsoon/$1 [L]