我正在使用Codeigniter开发一个应用程序,并试图生成SEO友好的URL,但一切都不正常。
我在routes
文件中尝试了以下代码:
$route['default_controller'] = "main";
$route['404_override'] = '';
$route['add-quiz'] = 'main/add_quiz/';
$route['category-wise-questions/(:any)'] = 'category_wise_questions/$1';
即使它生成:
http://localhost/appname/main/add_quiz
而不是:
http://localhost/appname/main/add-quiz
您使用的路由不会更改url,只会将url路由到特定的控制器,当您这样做时:
$route['add-quiz'] = 'main/add_quiz/';
您所要做的唯一一件事就是告诉CI将url:"add_quiz"指向控制器"add-quiz"(而不是"add_kiz")。
为了让它工作,你需要在.htaccess中添加一行,比如:
RewriteRule /main/add-quiz /main/add_quiz [L]
结果类似于:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L] #remove index.php
RewriteRule /main/add-quiz /main/add_quiz [L]
</IfModule>
然后,所有对"main/add_quiz
"的请求都将更改为"main/add-quiz
"。如果您的控制器被调用:"add_quiz
",您应该保留您的route.php.
也许您应该对.htaccess文件进行一些更改,使其适用于您的本地/远程项目。
希望它能有所帮助!
$route['main/add-quiz'] ='main/add_quiz/';
应该工作
我尝试过类似的方法:$route['mumbai/piles-doctor'] = 'mumbai/piles_doctor';
,效果非常好。
无需更新.htaccess。
还要确保translate_uri_dashes
设置为其默认值"False"。$route['translate_uri_dashes'] = FALSE
尽管其他人可以在这里引用更好的解决方案stackoverflow回答