假设有以下目录结构,
htdocs/
images/
css/
.htaccess
system/
index.php
...
我想通过该php脚本路由所有传入的请求。我一直在htaccess中尝试一些重写规则,但我似乎无法路由到文档根目录之外的文件。我在apache手册中找不到这个原因,所以最终使用了“包含”一个apache配置文件,规则不同。
有没有一种在docroot之外重写的方法?
答案 0 :(得分:4)
许多框架所做的是使用重写将所有请求路由到一个文件,您可以在其中执行更复杂的路由。示例.htaccess文件可能是:
# ignore anything that's an actual file (eg CSS, js, images)
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
# redirect all other traffic to the index page
RewriteRule ^.*$ index.php [L]
其中index.php位于您的doc根目录(htdocs / index.php)中,您可以从中安全地包含System / index.php。
答案 1 :(得分:3)
不,你不能在没有潜在巨大风险的情况下在docroot之外路由。
您应该将index.php
放在htdocs
文件夹中并在那里重写,而不是在外面。如果你要重写来处理索引,在docroot之外访问,你犯了一个小错误,任何黑客都可能利用它来重写请求字符串。不漂亮!