总结:有没有什么办法可以让域的子目录
http://company.com/subdir
指向 Web 根目录之外的目录,而无需.htaccess
访问服务器的配置?
我有一个网站company.com
,它在共享主机包(Apache 2、PHP 5)上运行三个特定国家/地区的 CMS 副本。
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
目录都需要放在 Web 根目录之外的单独位置。但是,出于维护原因(我将我的项目转交给另一家公司),我想避免这种情况。
对我来说,理想的解决方案是 CMS 的每个副本都位于 Web 根目录之外的目录中:
/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
指令只能指定 Web 根目录内的目标(正确吗?)
据我所知,我想做的是不可能做到在共享托管环境中,但我想看看这里是否有人有任何想法,因为这将是巨大的我能以这种方式来做这件事,我感到很欣慰。
我可以将 .htaccess 放入父目录(Web 根目录的上一级),但这似乎并没有改变任何东西。
我希望你表达得足够清楚。如果不够清楚,请告诉我,我会进行澄清。
放弃共享主机托管不是一个选择,要求主机托管公司放宽规则也不是一个选择——他们非常他们擅长自己的工作,但对于个人定制也非常严格和保守。
将每个app
目录留在 Web 根目录中,并使用或类似方式阻止对其进行访问Deny from all
也不是一种选择。
答案1
.htaccess 文件中不允许使用“Alias”指令。根据http://httpd.apache.org/docs/current/mod/mod_alias.html#alias,“别名”仅允许在“服务器配置,虚拟主机”中使用。这就是为什么在 .htaccess 上下文中设置它时会出现 500 错误的原因。
如果您不确定您的指令的正确上下文,那么在遇到服务器错误时查看 apache 手册中的上下文标志会很有帮助。
我认为,如果您的主机允许 FollowSymlinks,您可以使用一些符号链接轻松实现这一点:
/htdocs/de -> /de/htdocs
/htdocs/ch -> /ch/htdocs
/htdocs/at -> /at/htdocs