Php 如何从网站地址中删除文件扩展名?

Php 如何从网站地址中删除文件扩展名?,php,url-rewriting,friendly-url,Php,Url Rewriting,Friendly Url,我正在设计一个网站。我希望我的网站地址如下图所示: 我不希望我的网站看起来像http://something.com/profile.php。 当有人打开我的网站时,我想删除地址栏中的.php扩展名。换句话说,我希望我的网站像: 作为第二个示例,您可以查看StackOverflow网站地址本身 如何完成此操作?只需将一个.htaccess文件添加到站点的根文件夹中(例如,/home/domains/domain.com/htdocs/),其中包含以下内容: RewriteEngine on R

我正在设计一个网站。我希望我的网站地址如下图所示:

我不希望我的网站看起来像
http://something.com/profile.php
。 当有人打开我的网站时,我想删除地址栏中的
.php
扩展名。换句话说,我希望我的网站像:

作为第二个示例,您可以查看StackOverflow网站地址本身


如何完成此操作?

只需将一个.htaccess文件添加到站点的根文件夹中(例如,/home/domains/domain.com/htdocs/),其中包含以下内容:

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

在这些页面中,您可以了解更多有关这项功能的信息:(介绍,使用它),

您有不同的选择。 其中之一就是创建一个名为“profile”的文件夹,将“profile.php”重命名为“default.php”,并将其放入“profile”文件夹。 您可以通过以下方式向此页面下订单:

旧页:

新页面:


如果您不满意,请为复杂的方法留下评论。

实际上,最简单的操作方法是

  • 在服务器上打开新文件夹,例如“数据”
  • 将index.php(或index.html)放入其中
  • 然后URL www.yoursite.com/data将读取index.php文件。如果您想更进一步,请在其中打开一个子文件夹(例如“List”),在该文件夹中放置另一个index.php,然后您可以让www.yoursite.com/data/List运行该php文件


    通过这种方式,您可以完全控制它,这对SEO非常有用。

    创建目录并将index.php保留在其中的问题是

  • 您与菜单的链接将停止运行
  • 将有太多的目录。例如,stackoverflow上的每个问题都有一个单独的目录
  • 解决办法是 1.修改重写(如上所述)
    2.使用php代码在索引文件中动态包含其他文件。在这里多读一点关于它的内容

    与Igor相同,但不使用第2行:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^\.]+)$ $1.php [NC,L]
    

    首先,验证是否安装了mod_重写模块。然后,要小心理解它是如何工作的,很多人都是逆向的

    您不会隐藏URL或扩展名。例如,您要做的是创建一个指向旧url的新url

    要放在网站上的URL将是yoursite.com/play?m=asdf

    或者更好

    yoursite.com/asdf

    即使asdf目录不存在。然后在安装了mod_rewrite后,将其放入.htaccess。基本上是说,如果请求的URL不是文件也不是目录,请将其指向我的脚本:

    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ /play.php [L] 
    
    差不多完成了-现在您只需要在PHP脚本中写入一些内容来解析新的URL。您希望这样做,以便旧的也能工作-您要做的是维护一个系统,通过该系统,变量总是完全相同的创建一个数据库表,将“SEO友好URL”与产品id关联起来

    /一些很酷的视频(相当于产品ID asdf)

    这样做的好处是什么?搜索引擎将索引关键词“一些很酷的视频”。asdf?谁来搜索那个

    我不能给出如何编程的细节,但是去掉查询字符串,去掉末尾

    yoursite.com/Some-Cool-Video 
    
    变成“asdf”

    然后将m变量设置为

    m=asdf

    所以这两个URL仍然指向同一个产品

    yoursite.com/play.php?m=asdf 
    yoursite.com/Some-Cool-Video 
    

    mod_rewrite还可以做很多其他重要的事情,谷歌搜索并在您的服务器上激活它(它可能已经安装了)。

    下面是我使用的一种简单PHP方法。
    如果使用.php扩展名请求页面,则会在不使用.php扩展名的情况下发出新请求。php扩展名不再显示在浏览器的地址字段中

    我之所以提出这个解决方案,是因为许多.htaccess建议对我都不起作用,而且在PHP中实现它比试图找出.htaccess在我的服务器上不起作用的原因更快

    将其放在每个PHP文件的开头(最好放在其他文件之前):

    include_once('scripts.php');
    strip_php_extension();
    
    然后将这些函数放入文件“scripts.php”中:

    //==从请求的URI剥离.php扩展名
    函数条_php_扩展()
    {  
    $uri=$\u服务器['REQUEST\u uri'];
    $ext=substr(strrchr($uri,“.”),1);
    如果($ext=='php')
    {  
    $url=substr($uri,0,strrpos($uri,'.');
    重定向($url);
    }  
    }  
    //==重定向。尝试PHP头重定向,然后是Java,然后是http重定向
    函数重定向($url)
    {  
    如果(!headers_sent())
    {  
    /*如果尚未发送头=>DoPHP重定向*/
    标题('位置:'。$url);
    出口
    }  
    其他的
    {
    /*如果已发送头=>执行javaScript重定向*/
    回声';
    echo'window.location.href=“”.$url.“;”;
    回声';
    /*如果禁用javaScript=>执行html重定向*/
    回声';
    回声';
    回声';
    出口
    }  
    }  
    
    显然,您仍然需要安装Apache以将任何不带扩展名的请求重定向到具有扩展名的文件。 上面的解决方案只是检查所请求的URI是否有扩展,如果有扩展,则只请求不带扩展的URI。然后Apache重定向到带有扩展名的文件,但浏览器的地址字段中只显示请求的URI(不带扩展名)。
    优点是,代码中的所有“href”链接仍然可以具有完整的文件名,即包括.php扩展名。

    通过以下方式删除文件扩展名:

    原始URL:

    .htaccess规则从URL中删除.php、.html等文件扩展名:

    RewriteRule ^(.*)$ $1.php
    
    重写后:


    与第一个答案几乎相同,但还有一些优势

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

    如果您的站点中有其他文件扩展名,只需将其相加即可。Tony,您的脚本还可以,但如果您有100个文件?需要在所有这些中添加此代码:

    包括_once('scripts.php')
    strip_php_扩展(
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.html -f
    RewriteRule ^(.*)$ $1.html
    
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^(.*)$ $1.php