我使用以下规则将带有语言代码(en,fr等)的url重定向到没有它的url,但在任何段之前添加了index.php。但它没有按预期工作。
我需要index.php,因为我使用的是codeigniter,一个php框架。
网址用户访问:
他们实际到达的位置:
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]
答案 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 documentation和official regex routing documentation并查看this i18n library(有关codeigniter 2和3的工作没有问题)
我希望它能帮助你和其他人理解路线。