Web内部别名.htaccess内的别名

TL; DR:有没有办法让域的子目录http://company.com/subdir指向web根目录之外的目录,只使用.htaccess而不能访问服务器的configuration?

我有一个web站点company.com ,它在一个共享托pipe软件包(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根目录之外的一个单独的位置。 但是,出于维护的原因(我将我的项目传递给另一家公司),我想阻止这一点。

对我来说,理想的解决scheme是将CMS的每个副本都驻留在Web根目录之外的目录中:

 /htdocs <------- public web root /de/app /de/htdocs /ch/app /ch/htdocs /at/app /at/htdocs 

从而确保app目录不能从外部访问。

每个CMS的公共htdocs目录都将使用Alias指令有select性地提供给世界:

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

但是这是不可能的.htaccess (我得到一个500错误)在Alias指令是不可能指定的,据我所知, mod_rewrite指令只能指定目标在web根目录(正确?)

据我所知,我想在共享主机环境下做什么是不可能的 ,但是我想我会检查这里的任何人是否有任何想法,因为这对我来说是一个巨大的安慰。就这样

我可以把.htaccess放到父目录(web根目录上的一个目录),但是这似乎没有改变任何东西。

我希望这已经够清楚了。 如果不是,请让我知道,我会澄清。

离开共享主机不是一种select,也不是要求托pipe公司放松规则 – 他们擅长做什么,也非常严格和保守的个人定制。

将每个app目录留在Web根目录中,并使用Deny from all或类似的Deny from all阻止对它的访问,也不是一个选项。

.htaccess文件中不允许使用“别名”指令。 根据http://httpd.apache.org/docs/current/mod/mod_alias.html#alias ,“别名”只允许在“服务器configuration,虚拟主机”。 这就是为什么当你在.htaccess上下文中设置500错误。

如果您不确定指令的上下文是否正确,那么在出现服务器错误时,查看apache手册中的上下文标志会很有帮助。

如果你的主机允许使用FollowSymlinks,我想你可以使用一些符号链接轻松完成这个工作:

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