apache config 中的 rewriterule 或别名,用于将文件夹更改为根目录

Posted

技术标签:

【中文标题】apache config 中的 rewriterule 或别名,用于将文件夹更改为根目录【英文标题】:rewriterule or alias in apache config for folder to root change 【发布时间】:2018-06-05 08:52:18 【问题描述】:

我正在将我的 Drupal 站点从 www.example.com/demo 更改为 www.example.com。 js、css 等资源仍然存在于“demo”文件夹下。实现此更改所需的 Rewriterule 或 Alias 应该是什么?

我目前在我的 .htaccess 文件中有这个设置

选项 +FollowSymlinks 重写引擎开启 RewriteCond %DOCUMENT_ROOT%REQUEST_URI -f [OR] RewriteCond %DOCUMENT_ROOT%REQUEST_URI -d 重写规则 ^ - [L] 重写规则 ^ /

【问题讨论】:

为什么不将资源复制到演示文件夹之外? 外部还有其他文件夹,为了更好地组织演示文件夹中的大量文件,我想将其保留在文件夹中。 【参考方案1】:

你应该有这些规则来测试文件是否存在于demo文件夹中,如果存在则重写URL。

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %DOCUMENT_ROOT/demo%REQUEST_URI -f 
RewriteCond %REQUEST_URI (\.js|\.css)$
RewriteRule ^(.*) /demo/$1 [QSA,L]

第 1 行:测试根文件夹中是否不存在请求文件

第 2 行:测试请求文件是否存在于 demo 文件夹中

第 3 行:测试请求文件是否以 js / css 扩展名结尾(根据您的情况进行更改)

第 4 行:重写 URL 以请求演示文件夹中的文件

【讨论】:

看起来不错,需要澄清的一点是,这些条件是否会查找“demo”文件夹的父文件夹中存在的 index.html 文件并查找 js、css、字体等在演示文件夹中,同时从网址中删除“演示”? 另外,如果有人使用网址 www.example.com/demo,他应该被自动定向到 www.example.com 你应该修改规则以适应你的情况,上面的规则只查找以 js / css 结尾的文件的扩展名

以上是关于apache config 中的 rewriterule 或别名,用于将文件夹更改为根目录的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess中的apache rewrite规则详解

apache mod_rewrite:如何根据其他目录中的文件存在为同一目录添加不同的重写规则?

在Apache中使用mod_rewrite模块重写URL

apache mod_rewrite - 重写规则

ThinkPHP框架实现rewrite路由配置

Yii2掉index.php?r=