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