.htaccess 从子目录重写到根目录

Posted

技术标签:

【中文标题】.htaccess 从子目录重写到根目录【英文标题】:.htaccess rewrite from subdirectory to root 【发布时间】:2012-01-26 21:59:43 【问题描述】:

我对 mod_rewrite 规则有一些困难。 我想重写任何请求

www.example.com/dev/*

www.example.com/*

例如当请求的url是www.example.com/dev/index.php,响应应该是www.example.com/dev/index.php,不仅仅是url看起来像是来自根目录,实际上是使用了根目录的index.php

我已经尝试过有效的 mod_alias

RedirectMatch (^/dev/)(.*) http://www.example.com/$2

但是不能用mod_alias应用ip地址条件,所以还是需要用mod_rewrite解决。

有人能分享一些知识吗?谢谢。

【问题讨论】:

【参考方案1】:

这样的事情怎么样?

RewriteRule ^dev/(.*)$ $1

这需要位于根文件夹中,或应用于主要 Apache 配置(不在 .htaccess 中)。

关于 .htaccess 重定向的常规规则适用 - 包括 RewriteEngine onOptions FollowSymLinksAllowOverride FileInfo 包含在某处。详情请见http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule。

【讨论】:

不,没有运气。我想知道它是否与用于阻止访问某些类型文件的其他规则有关。所以我把这条新规则放在第一行,就在RewriteBase / 的下方,但还是不行。 @vicch 尝试添加[L] 标志,即将规则更改为RewriteRule ^dev/(.*)$ $1 [L],这样它就不会处理其他规则 @vicch - 您需要简化配置以解决此问题。删除所有其他规则并仅测试此规则,然后重新添加其他规则,直到找到干扰此规则的内容。 好的,问题解决了。是 dev 文件夹中的 .htaccess 阻止它工作。所以我只是禁用它以使重定向工作。谢谢 ziesemer 和 Ulrich。 奇怪的是,浏览器中显示的url是dev/index.php,而使用的文件实际上是根文件夹中的index.php。

以上是关于.htaccess 从子目录重写到根目录的主要内容,如果未能解决你的问题,请参考以下文章

重写 .htaccess 到子目录

.htaccess 将子域重写到目录

.htaccess 将子域重写到目录并将子域保留在 url

使用 .htaccess 将变量重写到目录

虚拟主机.htaccess伪静态(URL重写)建立多站点

我想用 .htaccess 禁用目录而不是子目录的访问