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

Псевдонимы вне корневого веб-сайта внутри .htaccess

TL; DR: Есть ли способ создать подкаталог домена http://company.com/subdir указать на каталог за пределами корневого веб-сайта, используя только .htaccess без доступа к конфигурации сервера?

У меня есть сайт company.com который запускает три копии CMS для конкретной страны на общем пакете хостинга (Apache 2, PHP 5).

CMS разделена на два каталога:

/app      <----- Non-public content, to be placed outside the web root
/htdocs   <----- Public content

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

www.company.com/de/  <-- 1st copy
www.company.com/ch/  <-- 2nd copy
www.company.com/at/  <-- 3rd copy

очевидная проблема с этой структурой, каждая CMS /app каталог необходимо поместить в отдельное место вне корневого веб-каталога. Однако по причинам технического обслуживания (я передаю свои проекты другой компании) я хотел бы предотвратить это.

Идеальным решением для меня было бы, чтобы каждая копия CMS находилась в каталоге вне корневого веб-сайта:

/htdocs <------- public web root

/de/app
/de/htdocs
/ch/app
/ch/htdocs
/at/app
/at/htdocs

таким образом гарантируя, что app каталог недоступен извне.

Паблик каждой CMS htdocs каталог будет доступен миру выборочно с использованием Alias директива:

Alias /de ../de/htdocs
Alias /ch ../ch/htdocs
Alias /at ../at/htdocs

Но это невозможно изнутри .htaccess (Я получаю ошибку 500) где Alias директивы указать невозможно, и, насколько мне известно, mod_rewrite директивы могут указывать только цели внутри веб-корня (правильно?)

Насколько я понимаю, я хочу невозможно сделать в среде общего хостинга, но я подумал, что проверю, есть ли у кого-нибудь здесь идеи, так как это было бы огромный облегчение для меня, что я могу сделать это таким образом.

Я могу поместить .htaccess в родительский каталог (на один уровень выше корневого веб-каталога), но это, похоже, ничего не меняет.

Надеюсь, это достаточно ясно. Если это не так, дайте мне знать, и я уточню.

Отказ от виртуального хостинга не является вариантом, равно как и не просит хостинговую компанию об ослаблении правил - они очень хороши в том, что они делают, но также очень строги и консервативны в отношении индивидуальных настроек.

Оставляя каждый app каталог в корневом веб-каталоге и заблокировать доступ к нему с помощью Deny from all или аналогичный, тоже не вариант.

Директива «Псевдоним» не разрешена в файлах .htaccess. В соответствии с http://httpd.apache.org/docs/current/mod/mod_alias.html#alias, «Псевдоним» разрешен только в «конфигурации сервера, виртуальный хост». Вот почему вы получаете ошибку 500, когда устанавливаете ее в контексте .htaccess.

При возникновении ошибки сервера полезно просмотреть флаг контекста в руководстве по apache, если вы не уверены в контексте, подходящем для вашей директивы.

Я думаю, вы могли бы легко добиться этого с помощью некоторых символических ссылок, если ваш хост позволяет FollowSymlinks:

/htdocs/de -> /de/htdocs
/htdocs/ch -> /ch/htdocs
/htdocs/at -> /at/htdocs