【问题标题】:htaccess Old files with .php new files without phphtaccess 带有 .php 的旧文件 没有 php 的新文件
【发布时间】:2017-01-20 19:36:07
【问题描述】:

大家好,我的问题是..
我正在使用 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]

现在我的问题是

我有旧网站http://www.example.com/

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

http://www.example.com/one.php  
http://www.example.com/two.php  
http://www.example.com/three.php  

此代码在没有任何 php 框架的情况下运行

现在新站点具有相同的域http://www.example.com/
在没有 .php 扩展名的 php 框架 codeigniter 上运行

  http://www.example.com/one
  http://www.example.com/two  
  http://www.example.com/three

现在所有这些页面或网址都由一个控制器处理

现在我想要什么当任何用户在谷歌或任何其他搜索引擎中搜索时,他们发现链接类似于

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

【问题讨论】:

    标签: php apache .htaccess codeigniter


    【解决方案1】:

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

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

    希望对你有帮助...

    【讨论】:

    • @daulat 好的,你需要将同样的东西设置到其他文件夹:RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php 这是一个很好的教程:[alexcican.com/post/…
    【解决方案2】:

    你可以抓取.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\/_\.-]*)\.php$ /$1 [L,R=301]
    • 当在htaccess.madewithlove.be 上输入 url 作为输入http://www.example.com/three/q/r/s.php 及以上正则表达式时,它可以工作。那么你能解释一下你的目标是什么吗?
    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    相关资源
    最近更新 更多