如何为我的 codeigniter 网站编写 .htaccess 文件
how to write .htaccess file for my codeigniter Website
这是我的 URL 和 SEO 标题
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=
这部分应该删除。
像这样使用 .htaccess
从 url 中删除 index.php
,
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/ [L]
要删除剩余部分,请使用 routes.php
$route['{default_controller}/{default_method}/(:num)'] = "{original_controller}/{original_method}/";
删除index.php
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/ [QSA,L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/ [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/";
然后在控制器动作功能中将你的 $_GET['seo']
更改为 $seo
。
之后您可以像这样访问您的页面:
http://prdemos.com/Web/2015/assetsrecovered/pages/page/ar-about-us
如果您想删除 /pages/page
,则可以将其添加到您的 routes.php
:
$route['(:any)'] = "pages/page/
。但是要小心使用它,因为路由文件中的错误放置会阻止其他路由工作
首先我设置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/";
$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);
}
}
我终于得到了这些 URL
http://mysitelive/pages/ar-about-us
http://mysitelive/pages/ar-services
这是我的 URL 和 SEO 标题
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=
这部分应该删除。
像这样使用 .htaccess
从 url 中删除 index.php
,
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/ [L]
要删除剩余部分,请使用 routes.php
$route['{default_controller}/{default_method}/(:num)'] = "{original_controller}/{original_method}/";
删除index.php
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/ [QSA,L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/ [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/";
然后在控制器动作功能中将你的 $_GET['seo']
更改为 $seo
。
之后您可以像这样访问您的页面:
http://prdemos.com/Web/2015/assetsrecovered/pages/page/ar-about-us
如果您想删除 /pages/page
,则可以将其添加到您的 routes.php
:
$route['(:any)'] = "pages/page/
。但是要小心使用它,因为路由文件中的错误放置会阻止其他路由工作
首先我设置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/";
$route['404_override'] = '';
我在 header.php
<?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);
}
}
我终于得到了这些 URL
http://mysitelive/pages/ar-about-us
http://mysitelive/pages/ar-services