【问题标题】:how to write .htaccess file for my codeigniter Website如何为我的 codeigniter 网站编写 .htaccess 文件
【发布时间】:2016-03-17 04:21:54
【问题描述】:

这是我的带有 SEO 标题的 URL

http://prdemos.com/Web/2015/assetsrecovered/index.php/pages/page?seo=ar-about-us

我想改一下

http://prdemos.com/Web/2015/assetsrecovered/ar-about-us

index.php/pages/page?seo=这部分应该被删除。

【问题讨论】:

    标签: php .htaccess codeigniter seo


    【解决方案1】:

    像这样使用.htaccess从url中删除index.php

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

    要删除剩余部分,请使用routes.php

    $route['{default_controller}/{default_method}/(:num)'] = "{original_controller}/{original_method}/$1";
    

    【讨论】:

    • 我应该把 $route['{default_controller}/{default_method}/(:num)'] = "{original_controller}/{original_method}/$1"; ??????
    • $route['(:any)'] = "pages/page/$1";
    • 目前 mu routes.php 是 $route['default_controller'] = "welcome"; $route['404_override'] = ''; $route['(:any)'] = "pages/page/$1";但网址仍然相同
    • 如果这不起作用尝试更改 routes.php 文件中的顺序。像这样$route['(:any)'] = "pages/page/$1";$route['default_controller'] = "welcome"; $route['404_override'] = '';
    【解决方案2】:

    删除 index.php

    <IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
    </IfModule>
    

    【讨论】:

      【解决方案3】:
      <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ index.php?/$1 [L]
      </IfModule>
      
      <IfModule !mod_rewrite.c>
        ErrorDocument 404 /index.php
      </IfModule>
      

      这个 .htaccess 文件将允许在 url 中写入不带 index.php 的链接,但它仍然看起来像: http://prdemos.com/Web/2015/assetsrecovered/pages/page?seo=ar-about-us

      你需要修改你的路由和控制器来移除?seo=

      在控制器中,您的操作应该是 public function page($seo) 这样的东西,路线应该是 $route['pages/page/(:any)'] = "pages/page/$1";,然后在控制器操作功能中将您的 $_GET['seo'] 更改为 $seo

      在此之后,您可以访问您的页面,例如: http://prdemos.com/Web/2015/assetsrecovered/pages/page/ar-about-us

      如果您想删除/pages/page,则可以将其添加到您的routes.php$route['(:any)'] = "pages/page/$1。但请谨慎使用,因为在路由文件中放置错误会阻止其他路由工作

      【讨论】:

        【解决方案4】:

        首先我设置config.php

        $config['index_page'] = ""; 
        

        $config['uri_protocol'] = 'PATH_INFO';
        

        之后在routes.php

        $route['default_controller'] = "welcome";  // Default Controller
        $route['pages/([a-zA-Z-0-9.&_]+)'] = "pages/index/$1";
        $route['404_override'] = '';
        

        我在header.php 中使用 slug(或 SEO 标题)调用了动态菜单

        <?php
        foreach($menu as $menu_item){
        ?>
        <li>
        <a href="<?php echo base_url();?>pages/<?php echo $menu_item['seo'];?>">
        <?php echo $menu_item['name'];?>
        </a>
        </li>
        <?php
        }
        ?>
        

        我的控制器是pages.php

        <?php
        defined('BASEPATH') OR exit('No direct script access allowed');
        
        class Pages extends CI_Controller {
        
            public function index($seo='')
            {
              $this->load->model('MPages');
              $data['seo']=$this->MPages->get_seo_by_page_slug($seo)->result();
              // Loading Common Views
                $this->load->view('header',$data);
                $this->load->view('topbar',$data);
                $this->load->view('mypage_view',$data);
            }
        }
        

        我终于得到了这些网址

        http://mysitelive/pages/ar-about-us
        http://mysitelive/pages/ar-services
        

        【讨论】:

          猜你喜欢
          • 2011-12-03
          • 1970-01-01
          • 2015-06-03
          • 2014-02-17
          • 1970-01-01
          • 2016-10-13
          • 2017-11-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多