apache - 如何将根目录中的所有文件仅重定向到另一个目录?
问题描述
我一直在寻找一段时间,但我找不到类似的东西。我有一个具有多种 URL 结构的网站。一些 URL 来自根目录,另一些则具有各种文件夹和路径。现在,我需要能够将所有路径从根目录重定向到另一个文件夹,但为来自其他文件夹的文件保留不同的结构
例如,这种模式:
/mypage
应该重定向到/anotherfolder/mypage/content.php
/mysecondpage
应该重定向到/anotherfolder/mysecondpage/content.php
在此示例中mypage
, 和mysecondpage
是要传递到目标的变量。
但是,对于来自根目录中另一个文件夹的页面,我需要在目的地使用另一种模式。例如:
/somerootfolder/somepage
应该重定向到someotherfolder/somepage.php
在这个例子中,somepage
是应该传递到目的地的模式。
第二种类型的重定向不应该改变第一种,反之亦然。
我为第一个指令所做的(根目录中的任何文件,但只有根目录中的文件应该重定向到另一个文件夹)是:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.*) /foldername/$1/content.php [L]
...其中$1
等于来自 的名称(.*)
。这本身就很好用,保存旧 URL 但从另一个文件夹中获取内容。
对于第二个指令(从一个文件夹到另一个文件夹的文件,保留名称并添加扩展名)我做了:
RewriteRule ^foldername/(.*) /anotherfolder/$1.php [L]
...在哪里$1
等于(.*)
。里面的所有内容都foldername
保留其旧 URL,但从anotherfolder
.
一切都单独工作,但不能一起工作。有任何想法吗?
解决方案
您的第二条规则与第一条规则中重写的 URL 匹配,因此第二次被重写 - 格式错误,例如/anotherfolder/mypage/content.php.php
. 如果不是针对检查REDIRECT_STATUS
环境变量的第一条规则的条件,您将有一个重写循环。
您似乎可以通过使正则表达式更具体来避免冲突(以及两个规则的条件) - 您只想匹配根目录或子目录中的路径段,而不是所有内容。
请尝试以下操作:
# Rewrite root files to another folder
RewriteRule ^([^/]+)$ /foldername/$1/content.php [L]
# Rewrite requests for /foldername/somepage to /anotherfolder
RewriteRule ^foldername/([^/]+)$ /anotherfolder/$1.php [L]
通过使正则表达式更具限制性,我们避免了冲突。
推荐阅读
- python - Python 控制台将我的输出结果分类为元组而不是列表
- api - 如何检索用于显示文件的每个字段的指标以及此 DSPATR 属性
- c# - MSBuild.SonarQube.Runner.Tool 不分析 .cs 文件
- python-3.x - 使用散景python将hovertool添加到第二个Y轴
- c++ - 如何生成隐式模板实例化列表以随后减少编译时间?
- clickonce - clickonce 清单缺少文件
- python - Python:牛顿法、黑森法、雅可比法
- reactjs - React 无法读取属性“var 的名称”未定义
- c# - C# 多维数组
- google-sheets - 使用 gs 中的 IF 语句替换单元格值