PHP/Apache 自定义文件类型处理

2024-01-06

我想知道是否可以为 Apache 创建由 PHP 文件处理的自定义文件类型处理。

我想要完成的是创建一种自定义.phps用于在浏览器中查看代码的扩展。

我正在使用 CodeMirror 来显示代码,但我希望此过程能够自动化,因为我只需更改.php延伸至.phps,以及其他一些.php文件会处理这个.phps文件,这样我就可以注入它的源代码.phps使用 CodeMirror 将文件转换为 HTML 文件。

我希望我的目标很明确,我只是想知道这是否可能。

Edit:

澄清一下 - 我想设置此规则从 apache.conf 工作,这意味着它可以在所有虚拟主机等上工作,而不是从.htaccess需要位于服务器上每个目录中的文件。

我想这应该适用于FilesMatch在 apache.conf 中,现在这就是我正在修改的内容:

<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php
    RewriteEngine on
    RewriteRule ^(.*)$ /tools/code/?file=$1 [L]
</FilesMatch>

不过我得到了400 Bad Request错误。我想在这样的基础上构建,以便 Apache 能够处理.phps文件来自其配置,而不必使用.htaccess服务器上每个目录中的文件。


这当然是可能的,只需查看文档即可。文件类型处理程序的工作方式有很好的解释,请查看AddType命令。然而,这是否是实现您所描述的目标(可视化 php 源代码)的好方法是值得怀疑的。使用重写将请求的文件移交给处理程序脚本,该处理程序脚本可以根据您的需要“发布”它,这不是更容易、更优雅吗?

例如,您可以使用如下 URL 并在内部重写它:

/source/path/to/file.php  => /path/to/handler.php?source=%2Fpath%2Fto%2Ffile.php

这可以通过 apache 重写模块或在 nginx 中使用通用处理程序脚本来完成:

RewriteEngine on
RewriteRule ^/source/(.)*$ /path/to/handler.php?source=$1 [L,B]

这样您就不必定义某些本地文件类型,并且可以命名要显示的 php 文件,就像它们本身一样:php 文件。我的意思是 php 文件就是 php 文件。文件扩展名应反映文件中包含的内容的类型,而不是应如何处理它。这意味着你混合了不同的逻辑层。

在我看来,这对用户来说更加透明。它还允许对要重写的 URL 进行更细粒度的控制,并且可能在需要时指定一些附加参数。


上述重写规则的两点注意事项:

  • 您可能必须启用 ApacheAllowEncodedSlashes to on,取决于您现有的服务器设置
  • 如果你想在里面使用重写规则,你必须稍微改变语法.htaccess样式文件(您必须删除前导斜杠,具体取决于您放置该文件的位置)。但一般来说,应尽可能避免此类文件:众所周知,它们容易出错,难以调试,有时会导致意外的副作用,并且really减慢服务器速度。所以if您可以访问服务器主机配置,您应该更愿意将此类规则放在那里。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP/Apache 自定义文件类型处理 的相关文章

随机推荐

  • 扩展第一个容器以输出额外的 div 属性

    我开始将 pelican 与 reStructuredText 一起使用rst页面格式 我有自定义 javascript jQuery 的东西 我想用 div 属性来控制 比如data default tpl basename 具有嵌套内容
  • 上传文件并验证文件扩展名和文件大小 MVC 5

    我使用下面的代码来上传并检查文件扩展名和文件大小 Update 2控制器 public ActionResult Create Bind Include anak ID Pubdate kind title file details lin
  • 具有静态和响应宽度的两列模板

    有时我们需要结合百分比和固定值来计算尺寸 特别是在创建一些响应式布局时 就我而言 我只发现两种方法可以在纯 CSS 中实现所需的效果 Problem 让我们快速看一下这个问题 我们需要创建一个拉伸到页面整个宽度的两列布局 其中一列具有恒定的
  • Javascript:保留窗口对象引用?

    我的 javascript 代码打开一些窗口槽 var win window open 我将 win 引用与所有其他打开的窗口一起存储在一个数组中 一切正常 直到开启器刷新为止 所以我想要实现的是在加载 主 窗口时取回对打开的窗口的所有引用
  • 如何将 future 移至 lambda 表达式

    我正在使用 Visual Studio 2013 我想实现这行代码 f p get future auto task f std move f use f 我知道解决方案here https stackoverflow com questi
  • 使用枚举序数是个好习惯吗?

    我有一个枚举 public enum Persons CHILD PARENT GRANDPARENT 使用有什么问题吗ordinal 检查枚举成员之间的 层次结构 的方法 我的意思是 使用它时除了冗长之外是否有任何缺点 当有人将来可能会意
  • React Native:同步运行函数

    我是面向对象编程的新手 我对承诺 异步 同步运行函数的了解只是基础 我非常感谢您的时间和关注 这是 React Native 文档中的示例 async function getMoviesFromApi try let response a
  • 除以零不会导致 Nvidia Jetson 上的运行时异常

    我不太熟悉 ARM 处理器的内部细节 但我不明白我的 Nvidia Jetson Nano 开发板上的以下行为 C 代码示例 main c include
  • 为什么我的图像背景在 float: left 上消失?

    我想创建一个两端都有图像的导航栏 以使其更加纯净 因此 我创建了下面的 HTML 和 CSS 效果非常好 我的菜单项位于 ul li 列表中 当我设置列表样式以将所有项目放在一行上时 末端的图像消失了 那是怎么回事 我如何解决它 罪魁祸首是
  • iPad UITextField - 使用 contentVerticalAlignment = UIControlContentVerticalAlignmentCenter 调整框架大小时光标未居中

    我正在开发一款通用的 iPhone iPad 应用程序 我根据用户输入调整一些 UITextField 的大小 我还有一些代码来移动 UITextFields 以便它们的位置在调整大小时有意义 这段代码不太短 但基本上可以归结为修改 UIT
  • 快速(以开发人员时间)方式使用 Java 中的大量 C++ 代码

    背景 我们正在设计一个物理应用程序 它将进行大量数据分析 但我们的重点是集成物理电子设备 基本上我希望能够打电话root http en wikipedia org wiki ROOT 这是一个来自CERN的大数据分析库 用C 编写 用Ja
  • BigQuery - UNNEST 中引用的值必须是数组。 UNNEST 包含 STRUCT 类型的表达式 ... [5:18]

    大家好 这次我遇到了一个新的分组数组错误 我将与您分享我正在咨询的表的架构 以便您可以告诉我解决方案 我尝试使用 ARRAY TO STRING 但在这种情况下它没有成功 SELECT individual details gender A
  • 由于反射而访问私有字段和属性不是安全问题吗?

    我最近才发现here https stackoverflow com questions 95910 find a private field with reflection由于反射 可以 至少在 C 中 查找私有字段和属性 我很惊讶 尽管
  • 无法子类化 WKWebView

    我正在尝试子类化 WKWebView 当我实现自己的初始化程序时 出现以下错误 required initializer init coder must be provided by subclass of WKWebView 好的 众所周
  • C++ 程序中非常奇怪的堆栈溢出

    我前段时间写了一个程序 Mac OS X C SDL FMOD 它的性能相当不错 但最近我想扩展它的功能并添加一些更多的代码 现在 当我运行它并尝试测试新功能时 程序因 SIGABRT 崩溃 查看调试器 在函数堆栈上我看到 kill 杀死
  • 签入范围前提条件

    我喜欢番石榴前提条件 但我真正需要的是另一种方法 检查数字是否在范围内 像这样的smt probably there should be checkStateInRange also public static void checkArgu
  • 发送 HTTP 时的 OutputStream OutOfMemoryError

    我正在尝试将大型视频 图像文件从本地文件系统发布到 http 路径 但一段时间后遇到内存不足错误 这是代码 public boolean publishFile URI publishTo String localPath throws E
  • 有没有办法限制或限制 PostgreSql 中的用户或连接?

    我们有一个设置 其中数据库实例在多个用户之间共享 我们正在尝试对共享 PostgreSQL 实施某种形式的节流或速率限制 以便一个用户不会因消耗所有资源而导致其他用户挨饿 我们可以想到的一种方法是添加连接池并固定我们为每个租户提供的连接数量
  • C++17 中数组索引范围的并行 for 循环

    我需要更新一个 100M 元素的数组 并且希望并行执行 std for each std execution par 看起来很棒 除了更新需要根据我正在更新的索引访问其他数组的元素 最小的serial我尝试并行化的工作示例可能如下所示 fo
  • PHP/Apache 自定义文件类型处理

    我想知道是否可以为 Apache 创建由 PHP 文件处理的自定义文件类型处理 我想要完成的是创建一种自定义 phps用于在浏览器中查看代码的扩展 我正在使用 CodeMirror 来显示代码 但我希望此过程能够自动化 因为我只需更改 ph