Php htaccess-将多个文件重定向到子文件夹到父文件夹
我希望重写url,如下所示: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 |
发件人: 到 我的意思是,隐藏/删除视图文件夹和(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]