【问题标题】:How to keep file extension removed in address bar?如何在地址栏中删除文件扩展名?
【发布时间】:2016-02-18 08:23:23
【问题描述】:

我正在使用以下代码从 URL 中删除 .php 扩展:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

我的问题是如何像堆栈溢出一样保持它被删除。如果我的 URL 是domain.com/about.php,它会被重定向到domain.com/about,但如果有人在about 之后故意键入.php,它就会保留在那里。此外,如果有人直接访问domain.com/about.php,它仍然存在。即使用户故意键入它,如何像 stackoverflow 一样从 URL 中删除任何扩展名?如果这不能在.htacess 中完成,我可以在 JavaScript 或 PHP 中完成吗?

【问题讨论】:

  • 如果你使用 codeigniter,它永远不会给出 .php,因为所有视图都是从控制器端调用的(MVC 模式),所以你可以给你的控制器和视图名称相同...
  • 您要查找的术语是“路由”

标签: javascript php .htaccess


【解决方案1】:

使用 Apache Web 服务器时对干净 URL 的魔术重写:

此过程由几个步骤组成。你应该觉得自己像个忍者,因为你想这样做并付出额外的努力。值得!

将 .htaccess 文件放在您正在工作的文件夹中:(例如,如果您正在目录 /company/ 中工作,则将其放在 /company/.htaccess 中) p>

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L,QSA]

所以,我们现在在您的服务器上建立了一个路径,它可以接受其中的任何内容,如果它不存在的话。例如,如果您指向/company/Joe_Plumber,它将重定向到 index.php。如果您指向 /company/style.css 并且它存在并且具有正确的权限,它将为您提供您要求的文件。

在该目录中创建一个 index.php 文件。(例如,/company/index.php

现在,在您的 .php 文件中,您将不得不处理用户请求的内容。 Basename 只会给你最后一个文件夹,所以如果我们请求/company/foo/bar,它只会得到bar

$q = basename($_SERVER['REQUEST_URI']);
$q = str_replace('_',' ',$q); // Convert any underscores to spaces
echo "Hi, {$q}!";

仅此而已。如果有什么我可以澄清或帮助的方法,请尽管询问。

【讨论】:

    【解决方案2】:

    试试:

    RewriteEngine on
    
    RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
    RewriteRule ^ %1 [NC,L,R]
    RewriteCond %{REQUEST_FILENAME} !-d
     RewriteCond %{REQUEST_FILENAME}\.php -f
     RewriteRule ^(.*)$ $1.php [NC,L]
    

    这将重定向

    http://example.com/file.php
    

    http://example.com/file
    

    然后重写:

    http://example.com/file
    

    http://example.com/file.php
    

    【讨论】:

    • 谢谢。但是,如果将.php 重定向到not php,然后将其重写为.php,那么它有什么用途?我想删除扩展。
    • 这将完全删除 .php 扩展名,这意味着如果您输入 example.com/file.php,您将被重定向到 example.com/file
    • @Strakeen 你能解释一下每一行的作用吗?这将有助于我下次编写自己的.htaccess。如果不是这样,您能否提供一些资源的 URl,我可以阅读这些资源以了解更多关于这些 .htaccess 语句如何工作的信息?
    猜你喜欢
    • 2017-07-12
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    相关资源
    最近更新 更多