PHP 内置服务器和 .htaccess mod 重写

2023-12-20

PHP 的内置服务器不使用 .htaccess 吗?我认为这是有道理的,因为它不依赖 Apache(?)。不管怎样,是否可以告诉服务器使用这些文件——它可以处理 URL 重写吗?我的框架中有一些依赖这些文件的项目。

APPLICATION_ENV=development php -S localhost:8000 -t public/


这是我用于内置 php Web 服务器的路由器,该路由器为文件系统中的资产(如果存在)提供服务,否则执行对 index.php 文件的重写。

运行使用:

php -S localhost:8080 router.php

路由器.php:

<?php

chdir(__DIR__);
$filePath = realpath(ltrim($_SERVER["REQUEST_URI"], '/'));
if ($filePath && is_dir($filePath)){
    // attempt to find an index file
    foreach (['index.php', 'index.html'] as $indexFile){
        if ($filePath = realpath($filePath . DIRECTORY_SEPARATOR . $indexFile)){
            break;
        }
    }
}
if ($filePath && is_file($filePath)) {
    // 1. check that file is not outside of this directory for security
    // 2. check for circular reference to router.php
    // 3. don't serve dotfiles
    if (strpos($filePath, __DIR__ . DIRECTORY_SEPARATOR) === 0 &&
        $filePath != __DIR__ . DIRECTORY_SEPARATOR . 'router.php' &&
        substr(basename($filePath), 0, 1) != '.'
    ) {
        if (strtolower(substr($filePath, -4)) == '.php') {
            // php file; serve through interpreter
            include $filePath;
        } else {
            // asset file; serve from filesystem
            return false;
        }
    } else {
        // disallowed file
        header("HTTP/1.1 404 Not Found");
        echo "404 Not Found";
    }
} else {
    // rewrite to our index file
    include __DIR__ . DIRECTORY_SEPARATOR . 'index.php';
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 内置服务器和 .htaccess mod 重写 的相关文章

随机推荐

  • 如何将鼠标光标从用户代码中移出?

    我的数据来自arduino 它从传感器获取数据 我想让用户程序处理数据 从 dev ttyUSB0 读取数据后 之后我需要使用程序的输出来控制鼠标光标 我真的很想避免此时编写内核驱动程序 推荐的方法是什么 在 Linux 环境中 也许是 X
  • 在 IE7 或 IE8 中查看打印 CSS

    我正在调试一个在打印时出现元素定位问题的网站 我有一个单独的 print css 文件 由具有 media print 属性的链接元素链接 此问题仅出现在IE7和IE8中 我正在寻找一种使用打印媒体类型查看页面的方法 但同时仍然可以使用 I
  • 将枚举与 Code First 和 Entity Framework 5 结合使用

    只是想确认一个印象 似乎 EF5 Code First 中的枚举仅在与使用它们作为属性类型的类在同一命名空间中声明时才受支持 谁能证实这一点吗 在网上找不到任何与此相关的内容 之前修复的相关错误 4 3 Beta 1 发行说明说 错误修复G
  • 将datagridView保存到sql数据库中

    第一次将数据网格保存到数据库 感谢您的帮助 我这样填充dataGrid private void FillGrid1 frmEditovat frm2 new frmEditovat this DataTable DT null DataR
  • 在DBeaver中查看主键

    DBeaver中有没有快速查看表主键的方法 就像例如在 Eclipse 数据源资源管理器中 其中主键行标有 PK 和特殊符号 对于给定的表 右键单击表名 在数据库导航器中 gt 选择查看图表 This will open a window
  • Excel VBA 尝试使用 For 循环将“MAX”公式写入具有不同范围的单元格

    我试图让 VBA 将公式写入不同的单元格 该公式将找到由某些变量决定的范围的最大值 我的变量I and J是 数字 整数 这是我的代码 Sub AddMAX Dim I As Integer Dim J As Integer Dim L A
  • Java:长格式的 util.Date 对象

    如何返回具有长值的 Date 对象 就像是 JsonProperty time public Date getTimeInLong Date date super getTime return date getTime I want thi
  • 运行 Apache 时,Django 打开 SQLite3 db 文件时出错

    我收到这个错误 操作错误 无法打开数据库文件 到目前为止我尝试过的事情是在 settings py 中设置 dev db 文件的绝对路径 我尝试将 www data 添加到我的管理组 并将项目文件夹的组设置为 admin 并将该组设置为 w
  • 将字符串列表从 Python 传递到 Rust

    我已经学习 Rust 大约两周了 今天 我进入了它的 FFI 我使用 Python 来玩 Rust 使用 ctypes 和 libc 我传递了整数 字符串 甚至学会了传递整数列表 感谢这个精彩的答案 https stackoverflow
  • Sqlite 与基于文件的数据存储?

    假设我有一个类似的课程 如下所示 class User attr accessor name age def initialize name age name age name age end end 现在 将用户保存为单个文件中 User
  • 是否可以通过单击链接/按钮来运行 php artisan 命令

    所以正如问题所说 当用户单击网络浏览器中的链接时 有没有办法在后台运行 php artisan 命令 例如 我想在我的应用程序中创建一个用于迁移迁移文件的按钮 因此当单击此按钮时 a href migrate class btn btn p
  • android 绑定到 AccessibilityService

    我创建了一个android服务 它是AccessibilityService 根据我的活动 我想绑定到该服务 没有进程间通信 所以我尝试创建一个本地Binder仅返回服务的实现 如本例所示http developer android com
  • 在webapp中获取当前的svn版本

    在 java web 应用程序中显示 使用修订号的最佳方式是什么 我们只使用 ant 来构建我们的 war 存档 没有构建服务器之类的 我希望有某种 if ref 可以写入资源文件中 但这仅在提交相关文件时更新 我在全球范围内都需要它 你会
  • 如何搜索包含 JSON 数组的 SQL 列

    我有一个包含单个 JSON 数组的 SQL 列 names Joe Fred Sue 给定一个搜索字符串 如何使用 SQL 在名称数组中搜索匹配项 我正在使用 SQL 2016 并查看了 JSON QUERY 但不知道如何在 JSON 数组
  • 嵌套 For 循环转换为嵌套 Promise

    我遇到了一个问题 我的程序仅在一次迭代时结束nameList 而且我不太确定不合逻辑的代码在哪里 全局给出 var require underscore var nameList Bob Susie var jsonDict 我复杂的嵌套从
  • Sublime Text 2 的 Goto Anything 中的这些数字是什么

    我已经用谷歌搜索了很多 但不幸的是 当你Ctrl P Goto Anything 在 Sublime Text 2 中 Ideas 据传闻 指示您的输入描述该文件的可能性有多大 随着比赛质量的提高而提高 在屏幕截图中输入 应用程序 应该会产
  • SQLSTATE[22003]:数值超出范围:1264 超出范围值

    我的 WAMP 服务器的十进制是十进制 5 2 我的查询异常 SQLSTATE 22003 数值超出范围 1264 第 1 行的列 converted 1000ml 的值超出范围 SQL 插入inventory databanks prod
  • Pycharm代码重新格式化:按运算符对齐行

    在 Jetbrains Pycharm 专业版 2016 1 中 是否有一种方法 内置或第三方 修改 python 中的代码样式以通过运算符 特别是赋值运算符 对齐连续行 例如 我想 var1 5 variable2 10 varbl3 1
  • utf8_bin 与 utf_unicode_ci

    我的餐桌网站 Website Name column name Google Facebook Twitter Orkut Frype Skype Yahoo Wikipedia 我使用 utf8 bin 排序规则 然后我在网站中搜索维基百
  • PHP 内置服务器和 .htaccess mod 重写

    PHP 的内置服务器不使用 htaccess 吗 我认为这是有道理的 因为它不依赖 Apache 不管怎样 是否可以告诉服务器使用这些文件 它可以处理 URL 重写吗 我的框架中有一些依赖这些文件的项目 APPLICATION ENV de