代码之家  ›  专栏  ›  技术社区  ›  ZZ Coder

在不使用mod_rewrite的情况下运行不带扩展的php?

  •  12
  • ZZ Coder  · 技术社区  · 16 年前

    使用Apache2.2和PHP5,在没有.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 回复  |  直到 16 年前
        1
  •  25
  •   outis    16 年前

    另一种选择是 content negotiation . 打开 multiviews :

    Options +MultiViews
    

    如果命名资源不存在,apache将为该文件进行全局搜索,然后根据浏览器发送的媒体类型和内容编码要求进行排序。如果只有一个文件(您的php脚本),那么url将解析为这个文件。

        2
  •  7
  •   fetasail    16 年前

    您还可以在 .htaccess :

    <Files app>
    ForceType application/x-httpd-php
    </Files>
    
        3
  •  -1
  •   Shane    16 年前

    简而言之,你不可能按照自己的意愿去做。为了执行这些文件,php将需要一些扩展名,因此您不妨将其保留为*.php。

    除非使用mod_rewrite,否则必须使用完整文件和扩展名调用文件。

    这就是mod_u 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>
    
    推荐文章