Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php htaccess-将多个文件重定向到子文件夹到父文件夹_Php_.htaccess_Redirect_Rewrite - Fatal编程技术网

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

Php htaccess-将多个文件重定向到子文件夹到父文件夹,php,.htaccess,redirect,rewrite,Php,.htaccess,Redirect,Rewrite,我希望重写url,如下所示: 发件人: 到 我的意思是,隐藏/删除视图文件夹和(mod001 | mod002 | mod003 | etc)文件夹,但我没有得到 这是我的文件夹结构: -system/ .htaccess index.php view/ mod001/ m1_file_01.php | m1_file_02.php | ... mod002/ m2_file_01.php |

我希望重写url,如下所示:
发件人:

我的意思是,隐藏/删除视图文件夹和(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]

我该怎么做呢?

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

您可能需要为
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
开头,对应于
mod001
,其中
m2
对应于
mod002
。它似乎是用0填充到3位数字。这很有用,但我恐怕在我的示例中没有很好地解释。文件夹mod001 | mod002中的文件可以有任何名称(不能以“m1|”精确开头),并且这些文件夹中没有两个同名文件(即,如果“mod001”文件夹中存在名为hola.php的文件;在文件夹mod002或mod003中,将没有hola.php的文件)这个想法是你看不到延伸。php@ManuelFernándezLévano那么它就不能用.htaccess来完成,而且在任何其他方法中都可能非常糟糕。唯一的方法是将所有请求路由到一个php脚本,并让该脚本检查每个文件夹,直到它找到请求的文件,这对性能非常糟糕,因为当添加更多文件夹时,它需要搜索的位置就越多。这正是我所担心的。经过深思熟虑,对.htaccess了解不多,我决定用PHP来实现它。无论如何,非常感谢你的帮助。这不是一种可怕的方式。许多/大多数框架都是这样做的(通过单个文件路由所有请求,该文件通过include或调用class方法将请求路由到其他文件)。不是我最初的想法,但现在我有了,效果很好!感谢您的帮助,我了解了更多关于.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]
#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]