子文件夹中的重写规则

Posted

技术标签:

【中文标题】子文件夹中的重写规则【英文标题】:RewriteRule in sub folder 【发布时间】:2020-08-27 02:07:33 【问题描述】:

我有问题。

有一个自定义的 mvc 结构,当它是根文件夹时,一切都可以通过 .htaccess 中的 RewriteRule 工作,但如果我将它设置为子文件夹,它就会停止工作。

.htaccess 是

重写引擎开启 RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d RewriteRule ^(.*)$ index.php?route=$1 [L,QSA] 添加默认字符集 UTF-8 然后我更改了基础并添加了: RewriteBase /mysubfolder/mySubSubfolder/

丛文件: 服务器管理员 root@domain.com DocumentRoot /var/www/rootfolder/ 选项索引 FollowSymLinks 多视图 允许覆盖全部 要求全部授予 订单允许,拒绝 全部允许目录> 选项索引 FollowSymLinks 多视图 允许覆盖全部 要求全部授予 订单允许,拒绝 全部允许目录>

我尝试了一些有关重写规则的魔术,但似乎我缺乏知识。 如果你能帮忙就好了。

谢谢,对不起,我有点菜鸟:)

【问题讨论】:

【参考方案1】:

tldr;

假设 .htaccess 文件没有移动到 MVC 应用程序的子目录...

更新全局重定向行:

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

到:

RewriteRule ^(.*)$ subdir/index.php?route=$1 [L,QSA]

对于大多数(如果不是 PHP 中的所有现代 MVC 框架),“所有”非文件路径 (URL) 都被设计为重定向到“index.php”文件。你可能会注意到这一行:

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

它的设计本质上是采用常规 URL,例如http://example.com/some/path 并将其重定向到 http://example.com/index.php?route=some/path

它前面的两行说明: "如果 URL 不是文件请求"

RewriteCond %REQUEST_FILENAME !-f

“如果 URL”不是对目录的请求”

RewriteCond %REQUEST_FILENAME !-d

然后重定向任何匹配正则表达式的东西:^(.*)$ 并将其重定向到目标路径

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

我假设您移动了项目(但不是 .htaccess 文件)。

假设如上,如果你把你的项目移动到子目录中,你需要更新目标路径,使index.php路径正确。

例如

RewriteRule ^(.*)$ subdir/index.php?route=$1 [L,QSA]

--

给出正则表达式的速成分解:

^ indicates the string must start with the string provided, e.g. ^apple would mean the string would only match if it starts with the word apple

$ indicates the string must end with the string provided, e.g. banana$ would mean the string would only match if it ended with the word banana

. indicates any character

* following the "." means any number of characters (1 to infinity, theoretically)

简而言之,^(.*)$ 意味着匹配几乎所有内容!

【讨论】:

非常感谢伙计,虽然我已经找到了答案,而且它比我想象的更愚蠢,只是关于链接,我非常感谢你的回答,因为它帮助我更深入地理解“重写规则”,谢谢

以上是关于子文件夹中的重写规则的主要内容,如果未能解决你的问题,请参考以下文章

重写子文件夹而不是主网站的规则

在子文件夹中维护单独的.htaccess文件

根域和子文件夹中的两个 htaccess 中的 404 问题

子文件夹中的重写 .htaccess

从 HTACCESS 文件中的所有 ISAPI 重写 3 规则中排除目录

.htaccess 为子文件夹中的 PHP 页面重写漂亮的 URL?