HTACCESS 重写:忽略语言代码并将 index.php 添加到 url 而不更改它
Posted
技术标签:
【中文标题】HTACCESS 重写:忽略语言代码并将 index.php 添加到 url 而不更改它【英文标题】:HTACCESS REWRITE: Ignore Language code and add index.php to the url without changing it 【发布时间】:2015-09-22 14:30:21 【问题描述】:我使用以下规则将带有语言代码(en、fr 等)的 url 重定向到没有它的 url,但在任何段之前添加了 index.php。但它并没有按预期工作。
我需要 index.php,因为我使用的是 php 框架 codeigniter。
用户访问的url:
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]
如果我使用以下规则,重定向有效,但我不想更改 url。
RewriteRule ^(en|fr)/(.*)$ http://www.example.com/index.php/index.php/$2 [NC,L]
【问题讨论】:
可能有帮助:Codeigniter regexp routing 我试过 (a-zA-Z2)/(.*) 也不行 因为这被列为未回答的问题:您还在寻找解决此问题的方法吗?如果是这样,您能否澄清“如果我使用以下规则,重定向有效,但我不想更改 url。”的意思? 【参考方案1】:网址中不需要 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 没有问题)
我希望它能帮助您和其他人了解路线。
【讨论】:
以上是关于HTACCESS 重写:忽略语言代码并将 index.php 添加到 url 而不更改它的主要内容,如果未能解决你的问题,请参考以下文章