在不使用 mod_rewrite 的情况下运行没有扩展的 PHP?

Posted

技术标签:

【中文标题】在不使用 mod_rewrite 的情况下运行没有扩展的 PHP?【英文标题】:Running PHP without extension without using mod_rewrite? 【发布时间】:2011-01-22 10:11:56 【问题描述】:

使用 Apache 2.2 和 php 5,在没有 .php 扩展名的情况下运行 PHP 的最佳方式是什么?例如,我有一个名为 app.php 的脚本,我喜欢将其调用为:

http://example.com/app

请注意,我仍然想保留文件的扩展名.php,而我没有mod_rewrite。也不想使用index.php,因为它需要太多目录。

我确实找到了一种方法,将其添加到我的.htaccess

AddHandler server-parsed .php
SetHandler application/x-httpd-php
AddHandler application/x-httpd-php .php

使用这个页面运行速度会慢一些。我怀疑它会在每个 PHP 页面上调用 SSI。想知道是否有更好的方法来实现这一点。

【问题讨论】:

我已经看到使用 <file> 指令完成了这项工作,但我认为与 mod_rewrite 相比,您不太可能在共享环境中运行它。 就我个人而言,我只想给出足够多的关于“降低性能”和“我给她所有的一切,船长!”的暗示。直到他们安装了 mod_rewrite。 【参考方案1】:

您还可以在 .htaccess 中强制指定特定文件的 mime 类型:

<Files app>
ForceType application/x-httpd-php
</Files>

【讨论】:

【参考方案2】:

另一种方法是使用content negotiation。开启multiviews:

Options +MultiViews

如果指定的资源不存在,Apache 将 glob 查找文件,然后根据浏览器发送的媒体类型和内容编码要求进行排序。如果只有一个文件(您的 PHP 脚本),那么这就是 URL 解析的内容。

【讨论】:

原来 mod_negotiation 安装在所有服务器上。所以这是迄今为止我找到的最好的解决方案。这样做也没有明显的性能差异。谢谢! 这个还是有关系的,你可能需要在“/etc/apache2/mods-enabled/mime.配置:“ @mckenzm:.html 和 .htm 文件不应被解释为 PHP。 AddType 只能用于设置资源的 MIME 类型,而不是处理程序。为此,有AddHandler(甚至在 PHP 通过 CGI 运行时也可以使用)。【参考方案3】:

简短的回答是,您将无法按照您想要的方式执行此操作。 PHP 将需要一些扩展名才能执行文件,因此您不妨将其保留为 *.php。

除非您使用 mod_rewrite,否则您将不得不使用完整的文件和扩展名来调用文件。

这就是 mod_rewrite 的美妙之处——它可以让你做这样的事情。

我会向你提出这个问题——你为什么不能使用 mod_rewrite?是环境问题,是选择,你用的是Lighttpd(lighty)吗?

扩展

如果服务器不支持 mod_rewrite,请将您的重写规则包装成这样,以防止它崩溃:

<IfModule mod_rewrite.c>
// DO REWREITE HERE
</IfModule>

如果您认为这是一个安全问题或同样有效的事情,那么您还可以进行以下检查并将它们发送到自定义 404 甚至您的文档,并为他们提供如何启用 mod_rewrite 的示例并解释需求等. 第二个检查是可选的——如果你不使用它,用户只会看到 .php 扩展名,但你的页面应该仍然可以工作。

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /application/errors/404.php
    // ERROR 404 ABOVE OR DO ANOTHER DIRECT REDIRECT TO AN INFORMATION PAGE
</IfModule>

【讨论】:

由于某种原因,mod_rewrite 未安装在该站点将运行的某些服务器上。我已经让它在没有扩展的情况下工作。只是想知道是否有任何更快的方法不诉诸 SSI。 @ZZ Coder - 有人可能对你有一些魔力,但我对此表示怀疑——我以前曾尝试过这种方法,但从未找到有效的解决方案。让人们知道如果他们的服务器不支持 mod_rewrite 那么他们将看到 PHP 扩展是否可行?如果未启用 mod_rewrite,请参阅我的编辑以防止 .htaccess 爆炸。这就是 wordpress 之类的东西的工作方式,而且对他们来说效果很好。

以上是关于在不使用 mod_rewrite 的情况下运行没有扩展的 PHP?的主要内容,如果未能解决你的问题,请参考以下文章

在不使用 .htaccess 文件的情况下,我应该将 RewriteRules 放在 Apache2 的哪里?

可以使用推送通知在不通知用户的情况下运行代码吗?

在不出现 Windows 控制台的情况下运行 Python 脚本

如何在没有 mod_rewrite 的情况下重定向除一个路径及其所有子路径之外的所有 URL?

有没有办法在不等待命令完成的情况下使用 shell_exec ?

有没有办法在不使用 __init__ 的情况下在实例初始化时自动运行方法?