不使用mod_rewrite运行没有扩展名的PHP?

时间:2010-03-01 18:46:27

标签: php mod-rewrite apache server-side-includes

使用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。想知道是否有更好的方法来实现这一目标。

3 个答案:

答案 0 :(得分:25)

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

Options +MultiViews

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

答案 1 :(得分:7)

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

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

答案 2 :(得分:-1)

简短的回答是,你无法以你想要的方式做到这一点。 PHP将需要SOME扩展才能执行文件,因此您可以将其保留为* .php。

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

这就是mod_rewrite的美妙之处 - 它可以让你做到这一点。

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

<强>扩展

如果服务器不支持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>