.htaccess 内 Web 根目录之外的别名

.htaccess 内 Web 根目录之外的别名

总结:有没有什么办法可以让域的子目录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

相关内容