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

问题描述 投票:51回答:10

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

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

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

有人可以帮助我完成这项工作吗?谢谢!

php url-rewriting friendly-url
10个回答
73
投票

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

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

0
投票

与第一个答案几乎相同,但更多的优势。

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

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

如果您的网站中有其他文件扩展名,请加上即可


13
投票

首先,验证是否已安装mod_rewrite模块。然后,要小心了解它是如何工作的,很多人都会倒退。

您不隐藏网址或扩展程序。例如,你所做的是创建一个指向旧网址的新网址

放在您网站上的网址为yoursite.com/play?m=asdf

还是更好

your site.com/阿斯顿飞

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

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /play.php [L] 

差不多完成了 - 现在你只需要在PHP脚本中写一些东西来解析新的URL。您希望这样做,以便OLD也可以工作 - 您所做的是维护一个系统,通过该系统变量始终完全相同或创建一个数据库表,将“SEO友好URL”与产品ID相关联。一个例子可能是

/ Some-Cool-Video(等于产品ID asdf)

这有什么好处?搜索引擎会将关键词“Some Cool Video”编入索引。 ASDF?谁会去搜索?

我不能给你如何编程的具体细节,但采取查询字符串,剥离结束

yoursite.com/Some-Cool-Video 

变成“asdf”

然后将m变量设置为this

米= ASDF

所以这两个URL仍然会转到同一个产品

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

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


5
投票

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

旧页面:http://something.com/profile.php?id=a&abc=1

新页面:http://something.com/profile/?id=a&abc=1

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


2
投票

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

  1. 您与菜单的链接将停止运作
  2. 会有太多目录。例如,stackoverflow上的每个问题都有一个单独的目录

解决方案是1. MOD REWRITE(如上所述)2。使用php代码动态地在索引文件中包含其他文件。在这里阅读更多信息http://inobscuro.com/tutorials/read/16/


2
投票

这是我使用的一种简单的PHP方式。 如果使用.php扩展名请求页面,则会生成一个没有.php扩展名的新请求。然后,浏览器的地址字段中不再显示.php扩展名。

我想出了这个解决方案,因为许多.htaccess建议都没有对我有用,而且在PHP中实现它比在试图找出为什么.htaccess在我的服务器上不起作用更快。

把它放在每个PHP文件的开头(最好先于其他任何东西):

include_once('scripts.php');  
strip_php_extension();  

然后将这些函数放在'scripts.php'文件中:

//==== Strip .php extension from requested URI  
function strip_php_extension()  
{  
  $uri = $_SERVER['REQUEST_URI'];  
  $ext = substr(strrchr($uri, '.'), 1);  
  if ($ext == 'php')  
  {  
    $url = substr($uri, 0, strrpos($uri, '.'));  
    redirect($url);  
  }  
}  

//==== Redirect. Try PHP header redirect, then Java, then http redirect
function redirect($url)  
{  
  if (!headers_sent())  
  {  
    /* If headers not yet sent => do php redirect */  
    header('Location: '.$url);  
    exit;  
  }  
  else  
  {
    /* If headers already sent => do javaScript redirect */  
    echo '<script type="text/javascript">';  
    echo 'window.location.href="'.$url.'";';  
    echo '</script>';  

    /* If javaScript is disabled => do html redirect */  
    echo '<noscript>';  
    echo '<meta http-equiv="refresh" content="0; url='.$url.'" />';  
    echo '</noscript>';  
    exit;  
  }  
}  

显然,你仍然需要设置Apache来将没有扩展名的任何请求重定向到带有扩展名的文件。上面的解决方案只是检查请求的URI是否有扩展名,如果它请求没有扩展名的URI。然后Apache使用扩展名重定向到文件,但只有请求的URI(没有扩展名)显示在浏览器的地址字段中。优点是代码中的所有“href”链接仍然可以具有完整的文件名,即包括.php扩展名。


1
投票

实际上,操纵这个的最简单方法是

  1. 在服务器上打开一个新文件夹,例如“数据”
  2. 将index.php(或index.html)放入其中

然后URL www.yoursite.com/data将读取index.php文件。如果你想进一步,打开一个子文件夹(例如“List”),在该文件夹中放入另一个index.php,你可以让www.yoursite.com/data/list运行该PHP文件。

这样你就可以完全控制它,对SEO非常有用。


1
投票

与Igor相同,但应该在没有第2行的情况下工作:

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

1
投票

通过.htaccess删除文件扩展名

原始网址:http://ravinderrathore.herobo.com/contact.php

htaccess规则从url中删除.php,.html等文件扩展名。

RewriteRule ^(.*)$ $1.php

After Rewriting: http://ravinderrathore.herobo.com/contact

RewriteEngine on

RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/

RewriteRule ^index(.*)?$ index.php$1 [L,QSA]

RewriteRule ^login_success(/)?$ login_success.php [L,QSA]

RewriteRule ^contact(/)?$ contact.php [L,QSA]

1
投票

Tony,你的脚本没问题,但如果你有100个文件?需要在所有这些中添加此代码:

include_once( 'scripts.php'); strip_php_extension();

我想你在每个php文件中都包含一个菜单(可能你的菜单显示在你的所有网页中),所以你只能在菜单文件中添加这两行代码。这项工作对我来说:D

© www.soinside.com 2019 - 2024. All rights reserved.