为什么在Codeigniter中使用路由生成SEO友好的URL不起作用


Why generating SEO friendly URL is not working using routes in Codeigniter?

我正在使用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回答