繁体   English   中英

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

[英]PHP/Apache custom file type handling

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

我要完成的工作是创建一种自定义.phps扩展名,以在浏览器中查看代码。

我正在使用CodeMirror来显示代码,但我希望此过程是自动化的,因为我只是将.php扩展名更改为.phps ,而其他一些.php文件将处理该.phps文件,因此我可以注入的所述源代码.phps文件与CodeMirror一个HTML文件。

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

编辑:

需要澄清的是-我想将此规则设置为从apache.conf运行,这意味着它将在所有虚拟主机等上运行,而不是在服务器上每个目录中都需要的.htaccess文件中运行。

我认为这应该与apache.conf中的FilesMatch一起使用,现在这就是我要修改的内容:

<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进行更细粒度的控制,并在需要时可以指定一些其他参数。


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

  • 您可能必须启用Apaches AllowEncodedSlasheson ,具体取决于您现有的服务器设置
  • 如果要在.htaccess样式文件中使用重写规则,则必须稍稍更改语法(必须删除前导斜线,具体取决于放置该文件的位置)。 但是通常,应尽可能避免使用此类文件:众所周知,这些文件容易出错,难以调试,有时会导致意外的副作用并确实使服务器运行缓慢。 因此, 如果您有权访问服务器主机配置,则应首选在其中放置此类规则。

httpd.confvhost.conf添加以下代码,然后重新启动Apache服务器

<IfModule mime_module>
    AddType application/x-httpd-php .phps
</IfModule>

否则你可以使用mod_rewrite

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

确定,我明白了,这是我做的:

apache.conf我添加了以下内容:

<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php
    RewriteEngine On
    RewriteRule ^(.*)$ /tools/code/index.php [QSA,L]
</FilesMatch>

/tools/目录被添加为别名

Alias /tools "C:/Web/httpdocs/tools/"

这足以将定义的index.php文件用作“处理程序”。

我使用Ace编辑器显示代码。 为了加载.phps文件以在编辑器中查看,我在编辑器文件中添加了一个不可见的<textarea>元素,并在其中加载了源:

<textarea id="code" style="display:none;">
    <?=file_get_contents(ltrim($_SERVER['DOCUMENT_ROOT'], '/').$_SERVER['REQUEST_URI']);?>
</textarea>

我修改了初始化代码以满足自己的需求:

<script>
    var editor = ace.edit('editor');
    editor.session.setMode('ace/mode/php');
    editor.setTheme('ace/theme/monokai');
    editor.setValue(document.getElementById('code').value);
    editor.gotoLine(1);
    editor.setShowPrintMargin(false);
    editor.setReadOnly(true);
</script>

瞧,我有一种更高级的查看.phps文件的方式。 感谢您帮助我步入正轨。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM