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