【问题标题】:Apache .htacces Rewrite Rule to Remove .php File ExtensionsApache .htaccess 重写规则以删除 .php 文件扩展名
【发布时间】:2011-08-29 02:02:27
【问题描述】:

标题解释了基础知识,现在问题来了:

我有很多类似这样的文件:

<?php include 'mynavbar.php';   
include 'myheader.php';    
include 'myfirstline.php'; 
include 'mybuttons.php';   
include 'myadvert.php'; 
include 'myimg.php';?>

而且我无法编辑所有文件并删除.php。如何在地址栏中不显示.php,但仍然可以使用.php 结尾来包含页面

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite redirect


    【解决方案1】:

    以下代码应该适用于您在 .htaccess 文件中隐藏 .php 扩展名:

    Options +FollowSymlinks -MultiViews
    RewriteEngine on
    
    # to make `/path/index.php` to /path/
    RewriteCond %{THE_REQUEST} ^GET\s(.*/)index\.php [NC]
    RewriteRule . %1 [NE,R=301,L]
    
    RewriteCond %{THE_REQUEST} ^GET\s.+\.php [NC]
    RewriteRule ^(.+)\.php$ /$1 [NE,R=301,L,NC]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/$1.php -f
    RewriteRule ^(.*?)/?$ $1.php [L]
    

    还请记住,这些规则会对您的 php 产生NO影响,包括例如:include 'myheader.php';

    这是因为这些包含是由 php 自己处理的,不经过 Apache。

    【讨论】:

    • 我已经尝试了 10 条重写规则,但都没有奏效。这个完美。非常感谢!
    • 如果你好心,你能告诉我如何删除主页的“/index”吗? ;;)
    • 关于could I also remove the "/index" for the homepage 当然,我也会尝试提出该规则条件。稍后会更新答案。
    • @Cristy:编辑了我上面的答案,以确保删除 /index 请验证。
    • 这很好用,除了在导航到/foo/ 的情况下 - 尾部的斜线使它在尝试寻找foo/.php 时出错 无论如何要让这个工作?谢谢!
    【解决方案2】:

    您没有采取正确的方法来解决您试图解决的问题。

    如果我理解得很好,你想做的是有一个像这样的网址:

    http://example.com/my/url
    

    而不是(例如):

    http://example.com/my/url.php
    

    如果是这种情况,你应该寻找的是rewrite url

    【讨论】:

    • 这是一个非常低质量的答案。您没有向社区添加任何内容。
    • 感谢您指出这一点。我应该在网络上复制已经存在 200^2000 次的东西,只是为了获得比 url 更有用的东西来分享。因为我确定你相信我的回答不正确?好孩子……
    • 我很欣赏你的评论,但我认为改变我的评论没有用:改成什么?如果我编辑它以插入解决方案,我只会复制接受的答案。对于他的要求,接受的答案是完整的,我的答案更通才,因为当时,我认为这个问题需要一个比特定答案更好的通才答案(通过谷歌)。我认为提出问题的用户是从 .htaccess/url-rewriting 开始,并将他重定向到更多链接,而不仅仅是他的具体答案更有帮助。这就是为什么。
    • 我接受您的反对票,因为 1. 您将自己描述为反对票(这是一个很好的步骤) 2. 您解释了原因。大多数投反对票的人都没有花时间解释原因。我相信,当您对某些内容投反对票时,比以往任何时候都更需要解释原因,因为您可以帮助作者理解他的错误(或为什么您不同意他的观点)。
    • 感谢您的 cmets。至少这里有一些对您的 cmets 的支持 :-)
    【解决方案3】:

    以下 RewriteRules 将 假定任何不匹配的文件的 PHP 扩展名。它应该位于 .htaccess 文件中 RewriteRules 的底部。

    # Force PHP extension if not a directory
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
    RewriteRule ^(.*)$ - [L]
    
    RewriteCond %{DOCUMENT_ROOT}/$1.php -f
    RewriteRule ^((.*/)*[^./]+)/*$ $1.php [L]
    

    这是用于 URL 重写。至于 include 语句,您仍然需要 PHP 扩展,因为它们是 物理 文件路径。如果你需要在那里做一些花哨的东西,你应该看看符号链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-18
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      相关资源
      最近更新 更多