.htaccess - 使用 .htaccess 重写文件夹
问题描述
对于网站,我想使用 .htaccess 设置重定向。我的文件夹结构类似于
/
/folderA/
/folderB/
/index/
其中 folderA 和 B 以及 index 包含子文件夹和文件。现在,我想将对根目录/
以及所有不存在的文件夹和文件的所有请求重写为index
. 它应该被屏蔽。在我看来,这是一项简单的任务,但我无法让它发挥作用。到目前为止,我尝试过
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /index/$1 [L]
重定向以某种方式起作用,但是当我直接调用根http://example.org/时它不起作用 。根目录是否也被视为有效目录或在 RewriteCond 检查中被排除?任何想法如何实现?
解决方案
是的,根也是一个目录。您将需要添加另一个规则来仅重写根。例如:
RewriteRule ^$ /index/ [L]
而且由于根是一个目录,您不妨从第一条规则中排除它。IE。更改(.*)
为(.+)
。
/index/...
但是,如果您要重写的 URL也不存在*1,您现有的规则将导致重写循环(500 错误)。例如。如果您请求/foo
,它将重写为/index/foo
,如果/index/foo
不存在,则重写/index/index/foo
为/index/index/index/foo
等。
您将需要添加一个附加条件(或使用否定前瞻)以防止对/index/...
自身的请求被重写。
( *1除非您在包含 mod_rewrite 指令.htaccess
的子目录中有另一个文件/index
并且您没有启用 mod_rewrite 继承。)
例如:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/index/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+) /index/$1 [L]
RewriteRule ^$ /index/ [L]
推荐阅读
- javascript - Javascript/Angular - 使用移动设备上的后退按钮防止默认操作
- python - sqlalchemy-migrate 找不到版本的更改文件
- mysql - 在 postgres 上工作的 MySQL 上的 CONSTRAINT 语法错误
- c# - C# Webhook InitializeReceiveGenericJsonWebHooks
- oracle - 是否可以在 Oracle/SQL 中使用对象作为 UDF 的参数?
- swift - 将 Realm List 转换为 Array 而不显式其类型
- netlogo - Netlogo 蒙德里安绘画生成器
- angular - mat-autocomplete 没有正确绑定
- python - 将两个变量添加到 QComboBox
- javascript - 在Node js中直接将chart.js图表创建为PNG?