如何将子文件夹的每个请求重定向到同一文件夹中的 index.php
myserver.com/folder/subfolder1/test redirected to folder/subfolder1/index.php
myserver.com/folder/subfolder2/test redirected to folder/subfolder2/index.php
...
我为每个子文件夹添加了一个 .htaccess,如下所示:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L,QSA]
我想使用父文件夹中的一个.htaccess 重定向它们:
Folder/
.htaccess <-- one redirection here
subfolder1/
index.php
subfolder2/
index.php
subfolder3/
index.php
...
subfolder n /
index.php
PS:所有子文件夹都有不同的名称,并且不遵循命名约定。
答案1
您只需要确保DirectoryIndex
在根.htaccess
文件中正确设置。(默认为index.html
,尽管许多发行版index.php
也包含,因此您通常不需要执行任何操作!)
例如:
DirectoryIndex index.php
这会告诉 Apache(mod_dir)当您直接请求目录时,在请求的目录中查找index.php
文件(注意相对 URL 路径)。
如果未找到DirectoryIndex
文档(即),那么您将收到 403 Forbidden(假设 mod_autoindex 已启用且目录列表已禁用,即)。index.php
Options -Indexes
您无需添加任何其他内容。(除非您确实想要“外部重定向”?!)
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ index.php [L,QSA]
您不需要使用 mod_rewrite。事实上,这条规则在这里不会做任何事情,因为第二个状况明确排除对目录的请求。
参考:
答案2
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+)/.*$ $1/index.php [L,QSA]
我找到了答案,根据此规则,如果文件不存在,则每个文件夹都会重定向到 index.php。