使用Apache 2.2和PHP 5,在没有.php扩展名的情况下运行PHP的最佳方法是什么。例如,我有一个名为app.php的脚本,我想将其作为
调用请注意,我仍然希望将.php扩展名保留到文件中,而我没有mod_rewrite。不要使用index.php,因为它需要太多目录。
我确实找到了一种方法,将其添加到我的.htaccess,
AddHandler server-parsed .php
SetHandler application/x-httpd-php
AddHandler application/x-httpd-php .php
使用此页面运行速度稍慢。我怀疑它在每个PHP页面上调用SSI。想知道是否有更好的方法来实现这一目标。
答案 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>