.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文件(即。index.php),那麼您將收到 403 Forbidden(假設啟用了 mod_autoindex 並且禁用了目錄列表,即。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。

相關內容