【问题标题】:put links without file extension (.php)放置没有文件扩展名的链接(.php)
【发布时间】:2013-08-03 19:23:14
【问题描述】:

是否可以配置 Apache 以不显示文件扩展名?

例如:假设我有domain.com/page.php,但希望将domain.com/page 作为网址。

有什么想法吗?

【问题讨论】:

    标签: php apache


    【解决方案1】:

    这是你的 .htaccess 文件

    #turn on url rewriting 
    RewriteEngine on
    
    #remove the need for .php extention 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME}\.php -f 
    RewriteRule ^(.*)$ $1.php
    

    这允许您访问没有扩展名的 .php 文件,因此您的链接应为

    href="/somepage"
    

    这将直接指向

    href="/somepage.php" 
    

    【讨论】:

      【解决方案2】:

      还有 MultiViews 作为 vhost 或 .htaccess 配置选项。见http://httpd.apache.org/docs/2.2/content-negotiation.html#multiviews

      从那个页面:

      MultiViews 的效果如下:如果服务器收到对 /some/dir/foo 的请求,如果 /some/dir 启用了 MultiViews,并且 /some/dir/foo 不存在,则服务器读取目录查找名为 foo.* 的文件,并有效地伪造了一个类型映射,该类型映射为所有这些文件命名,为它们分配相同的媒体类型和内容编码,如果客户端按名称要求其中之一。然后它会选择最符合客户要求的匹配项。

      【讨论】:

      • 多视图可能很烦人,如果文件名和重写模式的选择重叠,则会妨碍正常的 mod_rewrite 规则。
      • 非常正确。谨慎使用。
      • 我在我的虚拟主机中添加了 MultiViews 遭受了 2 天。我无法弄清楚为什么我的干净获取请求网址不起作用....谢谢@TheGingerDog
      • @DavidGoodwin 的评论和这个答案确实有助于解决重写规则和启用的 MultiViews 选项之间特别讨厌且难以跟踪的冲突。
      【解决方案3】:

      这称为 URL 重写。我最近第一次使用它,我用this tutorial来学习它,希望你也觉得它很棒:

      【讨论】:

        【解决方案4】:

        这是你的 .htaccess 文件

        RewriteEngine On
        RewriteRule ^page?$ page.php

        <a href="page">page</a>

        【讨论】:

          【解决方案5】:

          您需要一种称为 URL 重写的 Web 服务器功能 - 每个 Web 服务器应用程序(apache、IIS、nginx)都支持此功能。顾名思义,它接受请求的 URL 并将其重写为您定义的特定格式。

          www 上提供了许多指南,即使您使用共享托管解决方案,您仍然可以添加/修改 .htaccess 文件来执行此操作。

          【讨论】:

            猜你喜欢
            • 2017-12-15
            • 2011-11-14
            • 2013-03-06
            • 1970-01-01
            • 2019-07-07
            • 1970-01-01
            • 1970-01-01
            • 2016-12-24
            • 2021-07-18
            相关资源
            最近更新 更多