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
这里有一个很好的教程:[