HTACCESS REWRITE:忽略语言代码并将index.php添加到url而不更改它

时间:2015-07-05 09:35:32

标签: php apache .htaccess codeigniter mod-rewrite

我使用以下规则将带有语言代码(en,fr等)的url重定向到没有它的url,但在任何段之前添加了index.php。但它没有按预期工作。

我需要index.php,因为我使用的是codeigniter,一个php框架。

网址用户访问:

  

http://www.example.com/en/home

他们实际到达的位置:

  

http://www.example.com/index.php/home

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(en|fr)/(.*)$ index.php/$2 [NC,L]  

如果我使用以下规则,重定向会起作用,但我不想更改网址。

RewriteRule ^(en|fr)/(.*)$ http://www.example.com/index.php/index.php/$2 [NC,L] 

1 个答案:

答案 0 :(得分:0)

你在网址中不需要index.php。 但为此,它取决于您的配置服务器。

在大多数情况下,我的团队和我使用以下htaccess和 我们编辑配置文件(config.php)进行设置 index_page到''因为你的htaccess知道做得很好。 但是,对于路线,让codeigniter为你做这件事。

#.htaccess file
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system)
RewriteRule ^(.*)$ index.php/$1 [L]

对于 application / config / config.php 文件

/*
|--------------------------------------------------------------------------
| Index File
|--------------------------------------------------------------------------
|
| Typically this will be your index.php file, unless you've renamed it to
| something else. If you are using mod_rewrite to remove the page set this
| variable so that it is blank.
|
*/
$config['index_page'] = ''; // at the place of : 'index.php';

最后,您应该设置一些基本路线:

// application/config/config.php file
$route['default_controller'] = 'Home';
// other routes here
$route['^(en|fr)/(.+)$'] = "$2";
$route['^(en|fr)$'] = $route['default_controller'];

注意,路线的位置很重要。 (最精确到更少)

我建议您阅读official url documentationofficial regex routing documentation并查看this i18n library(有关codeigniter 2和3的工作没有问题)

我希望它能帮助你和其他人理解路线。