htaccess使用.php访问旧文件不使用php访问新文件

htaccess使用.php访问旧文件不使用php访问新文件,php,apache,.htaccess,codeigniter,Php,Apache,.htaccess,Codeigniter,大家好,我的问题是.. 我正在开发codeigniter,我正在一个主控制器中重定向我的所有URL 在application/config/routes.php中使用此代码 $route['(.*)'] = "Home/index"; 以及我希望使用不同控制器运行的任何其他文件 我是这样做的 $route['test/get']="test/get"; $route['test/index']="test/index"; 在路由文件的末尾,我添加了这一行 $route['(.*)'] = "

大家好,我的问题是..
我正在开发codeigniter,我正在一个主控制器中重定向我的所有URL

在application/config/routes.php中使用此代码

$route['(.*)'] = "Home/index";
以及我希望使用不同控制器运行的任何其他文件

我是这样做的

$route['test/get']="test/get";
$route['test/index']="test/index";
在路由文件的末尾,我添加了这一行

$route['(.*)'] = "Home/index";
在主控制器内部,我处理所有URL

一切正常

我的.htaccess文件如下所示

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
现在我的问题是

我有一个旧网站

所有页面都是简单的php页面,如

http://www.example.com/one.php  
http://www.example.com/two.php  
http://www.example.com/three.php  
此代码在没有任何php框架的情况下运行

现在新站点具有相同的域
在没有.php扩展名的php框架codeigniter上运行

  http://www.example.com/one
  http://www.example.com/two  
  http://www.example.com/three
现在所有这些页面或url都由一个控制器处理

现在我想要的是,当任何用户在谷歌或任何其他搜索引擎中搜索到类似的链接时

http://www.example.com/one.php  
当他们点击此链接时…
我们应该把它们重新定向到

http://www.example.com/one
我们怎么能做到呢

编辑
我有一个子路由,所有子路由也从一个控制器工作

  http://www.example.com/one/x/y
  http://www.example.com/two/p  
  http://www.example.com/three/q/r/s   

我想从url末尾删除.php

在您的.htaccess文件中试试这个

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

希望对您有所帮助。

您可以在
.php
之前获取字符串,然后发送301重定向:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?([\w\/_\.-]*)\.php$ /$1 [L,R=301]
通过这种方式,你可以告诉搜索引擎更新他们系统中的链接,以使用新的链接,而不会失去你建立的任何SEO声誉

编辑:

RewriteCond %{REQUEST_FILENAME} \.php$
您需要将此
RewriteCond
添加到文件中,以获取所有新的CodeIgniter路由。这将产生以下总体
.htaccess
文件

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteRule ^/?([\w\/_\.-]*)\.php$ /$1 [L,R=301]

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

它可以正常工作,但如果我在该域中有子文件夹,它只能为一个子级别工作,我对此不太了解。htaccess请帮助您需要将第一个
RewriteRule
替换为
RewriteRule^/?([\w\/\u\.-]*)\.php$/$1[L,R=301]
当以url作为输入输入时
http://www.example.com/three/q/r/s.php
在regex以上,它可以工作。那么你能解释一下你的目标吗?@daulat好的,你需要在其他文件夹中设置同样的内容:
RewriteRule^([^/]+)/([^/]+)/$/$/$1/$2.php
这里有一个很好的教程:[