在不使用 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?