Use o hífen (-) ao invés de barra (/) ou sublinhado (_) em rotas

Estou usando Codeigniter 3.x, usando routes.php Eu quero criar rotas dinâmicas, por exemplo, eu tenho um nome de class Class1 .

Eu quero url de saída

mysite.com/Class1-Student-Search

Mas usar hífen (-) não está funcionando

Se eu colocar uma barra (/), funciona,

 $route['(:any)/Student-Search'] = "search"; 

ele retorna

mysite.com/Class1/Student-Search

e usar o sublinhado (_) também funcionam.

 $route['(:any)_Student-Search'] = "search"; 

retorna

mysite.com/Class1_Student-Search

Mas eu quero usar hífen (-), se eu colocar, vai para a página de erro 404, usei essas quatro soluções, mas não funciono para mim.

 $route['(:any)-Student-Search'] = "search"; $route['([a-zA-Z]+)-Student-Search'] = "search"; $route['([a-zA-Z-0-9]+)-Student-Search'] = "search"; $route['(.*)-Student-Search'] = "search"; 

E se eu codificar o valor na rota

 $route['Class1-Student-Search'] = "search"; 

Então também está funcionando

Você está tentando criar rotas dinâmicas que não são possíveis no codeigniter se você vir o seguinte diagrama de stream do codeigniter, você entende o que quero dizer.

insira a descrição da imagem aqui

também você pode ver este gráfico no site oficial do codeigniter

Quando você tenta redirect ou chamar url, é trabalho assim

insira a descrição da imagem aqui

Cada pedido primeiro vai rotear para lá, não pode torná-lo dynamic

Aqui está a minha solução, está funcionando para mim, faça assim.

 $route['(:any)-Student-Search'] = "search"; 

então no seu botão de link, espero que na sua visão, depois do link como este.

 href="/classname; ?>-Student-Search" 

O ponto é que não só você tem que fazer suas rotas, também sufi-lo em seu link href também da mesma maneira.