.htaccess 将子文件夹重定向到相应的 index.php

.htaccess 将子文件夹重定向到相应的 index.php

如何将子文件夹的每个请求重定向到同一文件夹中的 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.phpOptions -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。

相关内容