这个虚假的docroot太片了吗?

时间:2010-12-07 01:35:26

标签: .htaccess

我喜欢将我的应用程序的PHP文件存储在docroot上面。

然而,我的共享主机也存储了很多垃圾。它看起来很杂乱。

我想知道这样做......

users/alex/public_html/
 - .htaccess
 - application/
 - system/

users/alex/public_html/www/
 - index.php
 - assets/css
 - assets/js

.htaccess文件包含此内容......

RewriteEngine On
RewriteRule .* www/$0

因此,对我的Web根目录的所有请求都会被静默重写到www/文件夹。

这太片了吗?

1 个答案:

答案 0 :(得分:2)

我真的不认为有任何真正的风险。从本质上讲,您将在Web服务器中使用相同的信任来完成其工作,就像限制对文档根目录的Web访问一样。但是有几点需要考虑。

首先,根据特异性选择性地评估.htaccess文件中的mod_rewrite规则集。使用 / category / path / 的URL和以下目录结构(假设所有.htaccess文件都具有mod_rewrite规则集),只有 path / 中的.htaccess文件将是评价。

public_html/
|- .htaccess
|- category/
   |- .htaccess
   |- path/
      |- .htaccess

那么,为什么这是一个问题呢?如果您的某个应用程序文件夹中有一个.htaccess文件应该位于文档根目录之上,假设其中至少有RewriteEngine On,则根目录.htaccess文件中的RewriteRule将不会应用。但这很容易避免。

其次,每个请求(包括静态资源的请求)不仅会产生解析.htaccess文件的开销,还会产生至少一个内部重定向。我不认为这种开销非常重要,但如果您的网站流量很大,则可能会产生(轻微)明显的影响。不过,在那时,你会更适合更灵活的托管,这将使这个过程变得不必要。

考虑到这些问题,我认为你没有更糟糕的事情并且重写以转移有效的文档根目录。即使您以某种方式弄乱.htaccess文件,mod_rewrite也会在配置无效的情况下抛出内部服务器错误,因此您唯一关注的原因是执行除您预期之外的其他操作。

关于这一点,我建议进行以下更改:

<强> /。htaccess的

RewriteEngine On

RewriteRule .* /www/$0

<强> /www/.htaccess

RewriteEngine On

# Check if the original request was to /www/something and redirect
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/www/
RewriteRule .* /$0 [R=301,L]

# The rest of your rules...