htaccess - 将多个文件重定向到子文件夹到父文件夹


htaccess - redirect multiples files into subfolders to parent folder

我想重写网址,像这样:
从:

http://localhost/system/view/mod001/m1_file_01.php (or any file inside mod001)
or 
http://localhost/system/view/mod002/m2_file_01.php (or any file inside mod002)

http://localhost/system/m?_file_01.php

我的意思是,隐藏/删除视图文件夹和(mod001|mod002|mod003|etc)文件夹,我没有。

这是我的文件夹结构:

-system/
    .htaccess
    index.php
    view/
        mod001/
            m1_file_01.php | m1_file_02.php | ...
        mod002/
            m2_file_01.php | m2_file_02.php | ...
        media/
            css/ | js/ | ...

这是我的.htaccess。

RewriteEngine On
#RewriteBase / #Yeah is commented
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}'.php -f
RewriteRule ^(.*)$ $1.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /system/ [L,R=301]

我该怎么做?

您可能需要

modXXX中的 3 个可能数字中的每一个使用不同的规则,因为您无法真正使用正则表达式进行字符串填充。这样的东西可能会起作用,但我还没有测试过它:

#match 1 digit
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (m([0-9])_.*'.php) view/mod00$2/$1 [QSA,L]
#match 2 digits
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (m([0-9][0-9])_.*'.php) view/mod0$2/$1 [QSA,L]
#match 3 digits
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (m([0-9][0-9][0-9])_.*'.php) view/mod$2/$1 [QSA,L]

好的,让我们想象一下你想得到m1_file_02.php,然后你想得到m2_file_02.php服务器如何猜测您要向其发送请求的确切文件/文件夹?您必须为每个文件夹指定一个唯一的标识符。无论如何,http://localhost/system/m?_file_01.php它不能使用您给出的结构。