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”文件夹。 您可以通过以下方式向此页面下订单: 旧页: 新页面:
如果您不满意,请为复杂的方法留下评论。实际上,最简单的操作方法是
通过这种方式,您可以完全控制它,这对SEO非常有用。创建目录并将index.php保留在其中的问题是
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