php - 为什么 index.php 在 codeigniter 中以第一段为前缀的 url 有效 | 代码点火器 | 重写条件
问题描述
我正在做一个 CodeIgniter 项目,今天我发现了一个非常奇怪的问题。
index.php
当我打开第一段中带有前缀的 URL 时,即使我希望 URL 返回一个404 Not Found
页面,它仍然可以工作。
例如,我的网站的 URL 是http://localhost/project
,当我打开 URLhttp://localhost/project/jobs
时它可以正常工作,但是当我打开http://localhost/project/index.phpjobs
它时它也可以工作。
我不知道这里发生了什么事!
请注意,该 URL不包含斜杠,但仍在工作,这不是错字。
请检查您的项目,如果有人有同样的问题,请告诉我,因为我认为这个问题也可能存在于您当前的项目中,但没有注意到。
.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^admin(.*)$ admin/index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
RewriteRule ^.well-known/ - [L,NC]
解决方案
你的第一个重写规则
RewriteRule ^admin(.*)$ admin/index.php?/$1 [L]
仅当满足前两个条件时才会兑现
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
已经遇到了。
现在,诀窍在于这些条件,基本上说只有当请求的资源(REQUEST_FILENAME
此处)不作为文件或文件夹存在时,才会执行重写。
由于index.php
显然存在重写规则,因此服务器实际上接收到原始(非重写)请求。
这就是为什么对于包含和不包含/index.php/
前缀的请求,您会看到相同结果的原因。
这同样适用于两组重写,用于管理页面的一组和常规的一组。
推荐阅读
- postgresql - 在 Rails 中对库存进行分组和计数
- cookies - 通过图像在外部域上设置cookie,似乎不起作用
- batch-file - 任务计划程序未运行交互式批处理文件/如何使批处理文件非交互式
- angular - 试图一起传递两个数据
- javascript - res.send 没有返回预期的数据:JavaScript、Express、Node?
- c# - 如何处理多个火箭推进器?
- java - 找不到元素“bean”的声明。加载 xml 时出错
- android - Android + Google Fit 数据上传:错误 5002 - DataType 的名称与包名称不匹配
- json - T-SQL - 在过滤的 JSON 数组中搜索
- google-apps-script - CalendarApp CreateEvent 在错误的日历上创建事件(具有不同 ID 的日历)