htaccess将所有非服务器端文件请求重定向到特定的子目录

时间:2012-12-10 00:17:00

标签: php mod-rewrite

我正在开发一个基于模板的CMS,其结构如下:

/public_html/admin/

^包含所有CMS文件和函数等。

/public_html/user_html/

^是客户端使用FTP访问的目录并管理所有客户端文件(即html,javascript,css,jpg,png等),但不允许添加服务器端文件(即php等)。< / p>

/public_html/index.php

^是驱动站点/应用程序本身的根公共目录,index.php是此目录中的唯一文件,它处理URI请求并运行应用程序。

进一步了解系统和结构:设置它以便user_html中的所有html文件充当系统某些模块的模板/布局 - 这些文件具有自定义标签以输出系统功能和服务器在请求时从user_html读取所有文件和文件夹,并将它们输出到应用程序。

这一切都很好并且运行一种享受。我在这里想要实现的是隐藏所有URL浏览器请求的user_html。所以基本上,html页面中的所有路径都必须像这样工作才能读取:

src="/user_html/js/scripts.js",
src="/user_html/css/styles.css"
src="/user_html/images/logo.png"

而创建和编辑html页面时用户/客户输入的所需路径如下:

src="/js/scripts.js"
src="/css/styles.css"
src="/images/logo.png"

客户端可以完全控制user_html目录中的目录和文件,因此所有文件路径都将永远在变化。基本上,浏览器需要知道所有文件以及找到这些文件的目录位于user_html内,但是显示它们就好像它们位于public_html中一样。

如果有人使用htaccess将所有URI请求(.php文件和/admin/目录除外)传递给user_html,或者任何其他想法和想法,只有一个简单的答案,我将不胜感激。

我进行了广泛的搜索,但找不到我所追求的解决方案。不过我确信这将是一个非常简单的RewriteCondition&amp;重写规则。

1 个答案:

答案 0 :(得分:1)

是的,这只是一些重写规则!

如果您可以接受“js / foo.js”形式的网址,那么您只需要在public_html中使用.htaccess文件。

# everything that's not .php or in /admin goes to user_html.
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !^(.+)\.php$
RewriteCond %{REQUEST_FILENAME} !^/admin(.+)$
RewriteRule ^(.+)$ /user_html/$1 [NC]