我正在构建一个广泛分发的应用程序,我想改变它的路由方式,以便所有文件都可以存在于文档根目录中,但仍然是安全的,就像它们位于文档根目录之上一样。
理想的设置是将应用程序文件夹放在docroot上面,如下所示:
/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 root之上的相同安全性,但是对于那些文件来说更简单可能不希望这种类型的设置为他们的共享主机。
我在考虑使用包含public_html/index.php
的{{1}}内的包含但我似乎无法使其工作。
任何帮助都将不胜感激。
答案 0 :(得分:2)
根据我的理解,您希望将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
开头的网址路径...这意味着/public
和 http://www.mysite.tld/filename.ext
都可以访问http://www.mysite.tld/public/filename.ext
下的任何文件 - 可能会扰乱搜索引擎。
为了更加安全,您还可以将.htaccess
文件添加到/application
目录,如:
Deny from all
答案 1 :(得分:1)
使用此功能。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public_html/ [L]
RewriteRule (.*) public_html/$1 [L]
</IfModule>
答案 2 :(得分:0)
您是否在应用中使用任何框架?
您是否有一些我们可以访问的代码示例来了解您的问题?
基本上,您只需要在public_html文件夹中使用htaccess将请求重定向到公用文件夹,并禁止访问除公共之外的任何其他目录。