我正在编写一个简单的基于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

重定向index.php,使用htaccess将all重定向到index.php相关推荐

  1. .htaccess 重定向_如何使用.htaccess将HTTP重定向到HTTPS

    .htaccess 重定向 Chrome and Firefox have started showing insecure warnings on sites without SSL certifi ...

  2. php跳转隐藏url参数,.htaccess从URL中删除index.php并隐藏参数键

    我有以下网址 www.example.com/index.php?tag= xxx 我想使用.htaccess进行如下操作 www.example.com/xxx 我用这段代码完成了: Options ...

  3. ngin配置301重定向设置方法和nginx子目录301重定向

    这篇文章主要介绍了ngin配置301重定向设置方法和nginx子目录301重定向,需要的朋友可以参考下 nginx版本为1.1.19. 若域名由a.com转移到了b.com,并对两个域名有所有权,可以 ...

  4. linux用echo重定向到文件,Linux – Bash将String重定向到文件

    我写了一个简单的脚本,它正在读取文件内容并在此文件中递增一个数字,然后我使用awk保持更改,当我尝试使用'>'重定向新的String时整个字符串重定向到一行,而不是像原来的那样是4行. #!/b ...

  5. linux重定向多个文件,Linux base shell重定向详解

    一.标准输入,标准输出与标准错误输出 在linux shell执行命令时,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件.由于文件描述符不容易记忆,shell同时也给出了相应的文件名 ...

  6. springmvc重定向到另一个项目_SpringMVC——redirect重定向跳转传值

    spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. 首先先来介绍一下不带参数的重定向: 我在后台一个 ...

  7. linux tee 重定向_快乐的linux命令行-重定向

    整理自<快乐的linux命令行一书>. linux系统版本: Ubuntu 17.04 本章,我们将介绍命令行最酷的特性,叫做I/O重定向,通过这个工具,可以重定向命令的输入输出,命令的输 ...

  8. python重定向_Python接口自动化(十)重定向(Location)

    在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url. 1.请求转发 该动作是服务器行为,在web容器中进行的,客户端对于跳转是不知道的,地址栏中显示的URL是不会变化的, ...

  9. linux重定向到程序,技术|Linux I/O 重定向基础

    Linux 管理的一个最重要并且有趣的话题是 I/O 重定向.此功能在命令行中使你能够将命令的输入输出取自或送到文件中,或者可以使用管道将多个命令连接在一起以形成所谓的"命令管道" ...

最新文章

  1. pytorch方法测试——损失函数(CrossEntropyLoss)
  2. 程序人生【一些经典的资料】
  3. 做一个”合格“的程序员(二)——学习管理
  4. 循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)
  5. 【PAT乙级】1065 单身狗 (25 分)
  6. mysql按升序创建索引_Mysql中的降序索引底层实现
  7. Mozilla官方:Firefox 3.5.1问题并非安全漏洞 仅是堆溢出Crash
  8. 腾讯觅影:AI+医疗不光能诊断癌症,还可以很公益
  9. 在写HTML和CSS时的黄金规范
  10. C++内存泄漏的几种情况
  11. [转载] Python中filter筛选函数匿名参数问题
  12. 利用路由器实现×××的基本配置方法
  13. js库编写的环境和准备工作
  14. 对计算机硬件的工作原理的认识,计算机硬件组成及工作原理
  15. Arduino + RFID 读取 IC 卡 Arduino uno中获得RFID的UID 并通过串口转发RFID卡号
  16. 微信群助手(自动整理拼车信息)
  17. Docker的深入浅出(入门新手篇)
  18. 快速Euclidean算法
  19. 计算机文件丢失系统无法启动,文件损坏或丢失windows无法启动_windows无法启动文件损坏解决方法...
  20. 那些年,被我们误解的程序员

热门文章

  1. CNN应用之SPP(基于空间金字塔池化的卷积神经网络物体检测)-ECCV 2014-未完待续
  2. Google Java编程风格指南中文版
  3. Java 面试知识点解析(六)——数据库篇
  4. [Google Guava] 6-字符串处理:分割,连接,填充
  5. Spring五个事务隔离级别和七个事务传播行为
  6. 趣文:如果网络浏览器是妹纸
  7. 自己动手实现山东大学QLSC_STU无线网络掉线后自动重连
  8. 2018年高教社杯全国大学生数学建模竞赛C题解题思路
  9. Android爬坑之旅之WebView
  10. 深智云 让企业在物联网时代实现数据价值