使用 .htaccess 重写文件夹
Rewrite folders with .htaccess
对于网站,我想使用 .htaccess 设置重定向。
我的文件夹结构类似于
/
/folderA/
/folderB/
/index/
其中文件夹 A 和 B 以及索引包含子文件夹和文件。现在,我想将对根目录 /
和所有不存在的文件夹和文件的所有请求重写为 index
。它应该被掩盖。在我看来,这似乎是一项简单的任务,但我无法让它发挥作用。到目前为止,我试过了
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /index/ [L]
重定向以某种方式起作用,但当我直接调用根 http://example.org/ 时它不起作用。
根是否也被视为有效目录或在 RewriteCond 检查中被排除?有什么想法可以实现吗?
是的,根目录也是一个目录。您将需要添加另一条规则以仅重写根目录。例如:
RewriteRule ^$ /index/ [L]
并且由于根目录是一个目录,您最好将其从第一条规则中排除。 IE。将 (.*)
更改为 (.+)
.
但是,如果您在 /index/...
中重写的 URL 也不存在 [=36],您现有的规则将导致重写循环(500 错误) =]*1。例如。如果您请求 /foo
,它会重写为 /index/foo
,如果 /index/foo
不存在,则它会重写为 /index/index/foo
到 /index/index/index/foo
等
您将需要添加一个附加条件(或使用否定前瞻)以防止对 /index/...
本身的请求被重写。
(*1 除非你在 /index
子目录中有另一个 .htaccess
文件包含 mod_rewrite 指令和你没有启用 mod_rewrite 继承。)
例如:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/index/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+) /index/ [L]
RewriteRule ^$ /index/ [L]
对于网站,我想使用 .htaccess 设置重定向。 我的文件夹结构类似于
/
/folderA/
/folderB/
/index/
其中文件夹 A 和 B 以及索引包含子文件夹和文件。现在,我想将对根目录 /
和所有不存在的文件夹和文件的所有请求重写为 index
。它应该被掩盖。在我看来,这似乎是一项简单的任务,但我无法让它发挥作用。到目前为止,我试过了
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /index/ [L]
重定向以某种方式起作用,但当我直接调用根 http://example.org/ 时它不起作用。 根是否也被视为有效目录或在 RewriteCond 检查中被排除?有什么想法可以实现吗?
是的,根目录也是一个目录。您将需要添加另一条规则以仅重写根目录。例如:
RewriteRule ^$ /index/ [L]
并且由于根目录是一个目录,您最好将其从第一条规则中排除。 IE。将 (.*)
更改为 (.+)
.
但是,如果您在 /index/...
中重写的 URL 也不存在 [=36],您现有的规则将导致重写循环(500 错误) =]*1。例如。如果您请求 /foo
,它会重写为 /index/foo
,如果 /index/foo
不存在,则它会重写为 /index/index/foo
到 /index/index/index/foo
等
您将需要添加一个附加条件(或使用否定前瞻)以防止对 /index/...
本身的请求被重写。
(*1 除非你在 /index
子目录中有另一个 .htaccess
文件包含 mod_rewrite 指令和你没有启用 mod_rewrite 继承。)
例如:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/index/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+) /index/ [L]
RewriteRule ^$ /index/ [L]