重定向index.php,使用htaccess将all重定向到index.php

我正在编写一个简单的基于PHP的MVC-ish框架.我希望这个框架能够安装在任何目录中.

我的PHP脚本抓取请求uri并将其分解为段.它使段1成为控制器,段2成为行动.当我这样做时,这一切都很好:

它将转到特定的模块控制器和方法.现在我有一个默认控制器,即家庭控制器,它位于文件夹主页中.

我想将每个文件夹和php文件重定向回index.php,保留其他所有内容.

我遇到的第一个问题是它永远不会重定向到正确的文件夹,总是重定向到域根文件夹.

这是我试过的:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule . index.php [L]

解决方法:

你的重写规则看起来几乎没问题.

首先确保您的.htaccess文件位于文档根目录(与index.php相同的位置),否则它只会影响它所在的​​子文件夹(以及其中的任何子文件夹 – 递归).

接下来对您的规则稍作修改,使其看起来像:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

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

目前你只是匹配.这是任何字符的一个实例,至少需要.*来匹配任何字符的任意数量的实例.

$_GET [‘path’]变量将包含伪目录结构,例如/ mvc / module / test,然后您可以在index.php中使用它来确定您想要执行的Controller和操作.

如果你想将整个shebang安装在一个子目录中,比如/ mvc /或/ framework /,那么最简单的方法是稍微改变重写规则以将其考虑在内.

RewriteRule ^(.*)$/mvc/index.php?path=$1 [NC,L,QSA]

并确保index.php位于该文件夹中,而.htaccess文件位于文档根目录中.

$_GET [‘path’]的替代品(18年2月更新和19年1月更新)

实际上并不需要(现在甚至不常见)将路径设置为$_GET变量,许多框架将依赖$_SERVER [‘REQUEST_URI’]来检索相同的信息 – 通常用于确定使用哪个Controller – 但原则是完全相同的.

这确实简化了RewriteRule,因为您不需要创建path参数(这意味着OP的原始RewriteRule现在可以工作):

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^.*$/index.php [L,QSA]

但是,关于在子​​目录中安装的规则仍然适用,例如,

RewriteRule ^.*$/mvc/index.php [L,QSA]

旗帜:

NC =无大小写(不区分大小写,因为模式中没有字符,所以不是必需的)

L = Last(在重写之后它会停止重写,所以请确保它是重写列表中的最后一个)

QSA =查询字符串附加,以防你有类似的东西?喜欢=你想要保留的penguins并传递给index.php.

标签:htaccess,php

来源: https://codeday.me/bug/20190911/1804309.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值