路由所有请求到子文件夹htaccess


Route All Requests to Subfolder htaccess

我正在构建一个广泛分发的应用程序,我想改变它的路由方式,以便所有文件都可以存在于文档根目录中,但仍然是安全的,就好像它们在doc根目录之上。

理想的设置是将应用程序文件夹置于根目录之上,如下所示:

/home
/---/username
/---/--->application
/---/---/--->all application files
/---/--->public_html
/---/---/--->all public files

但我知道这对我的应用程序的所有潜在用户来说都不是理想的,所以我更喜欢把它移到这样的结构中:

/home
/---/username
/---/--->public_html
/---/---/--->application
/---/---/---/--->all application files
/---/---/--->public
/---/---/---/-->all public files

基本上就是把所有东西都放在doc根目录下,禁止访问应用程序目录,并将所有请求路由到公共文件夹,这样我们就可以获得与doc根目录下的文件相同的安全性,但对于那些可能不希望在共享主机上设置这种类型的人来说,这更简单。

我想在public_html/index.php中使用包含,其中包括public_html/public/index.php,但我似乎无法使其工作。

正如我所理解的,如果你想让home/username/public_html作为真正的 Apache文档根,拒绝从/application目录访问,理想情况下,将所有web请求路由到/public子目录而不是(大概对于不在专用服务器上的用户谁也不能安装在docroot之外)…如果我误解了问题,请告诉我,我会更新/删除答案;)

您应该能够在/home/username/public_html中使用.htaccess文件实现这一点,如:

RewriteEngine on
# deny access to the application directory
RewriteRule ^application/?  - [F]
# route all requests to the public directory that aren't already there
RewriteRule ^(?!public/)(.*)$   /public/$1  [L,QSA]

任何访问/application目录的尝试将导致403错误,所有对http://www.myserver.tld/file.ext的请求将被路由到http://www.myserver.tld/public/file.ext

注意:为了防止重定向的递归循环,重写规则将重定向任何已经以/public开头的URL路径…这意味着/public下的任何文件都可以在http://www.mysite.tld/filename.ext http://www.mysite.tld/public/filename.ext上访问-这可能会扰乱搜索引擎。


为了更安全,你也可以添加一个.htaccess文件到/application目录,如:

Deny from all

用这个

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule    ^$    public_html/    [L]
RewriteRule    (.*) public_html/$1    [L]
</IfModule>

你的应用中是否使用了框架?

你有代码的样本,我们可以访问了解你的问题?

基本上,你只需要在你的public_html文件夹中添加一个htaccess,将请求重定向到公共文件夹,并禁用对公共目录以外的任何目录的访问。