.htaccess codeigniter上的重写规则不';不去

.htaccess codeigniter上的重写规则不';不去,.htaccess,codeigniter,.htaccess,Codeigniter,很多次之后,我真的不明白为什么我的重写规则不好。我使用CI框架,在URI中设置/france时需要转到controller/show/place/1 这是我的代码: Options +FollowSymLinks SetEnv PHP_VER 5 AddDefaultCharset UTF-8 RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f Rewr

很多次之后,我真的不明白为什么我的重写规则不好。我使用CI框架,在URI中设置/france时需要转到controller/show/place/1

这是我的代码:

    Options +FollowSymLinks
    SetEnv PHP_VER 5
    AddDefaultCharset UTF-8

    RewriteEngine On

    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond $1 !^(index\.php|robots\.txt|img\/|css\/|js\/|favicon.ico)

    RewriteRule ^(.*)$ /index.php/$1 [PT,L]

    RewriteRule ^france$ index.php/show/place/1 [PT,L]

有人能帮我吗?

试着改变一下规则的顺序:

Options +FollowSymLinks
SetEnv PHP_VER 5
AddDefaultCharset UTF-8

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|robots\.txt|img\/|css\/|js\/|favicon.ico)

RewriteRule ^france$ index.php/show/place/1 [PT,L]

RewriteRule ^((?!index\.php/).*)$ /index.php/$1 [PT,L]

使用Codeigniter URI路由更方便,请参见查看URI路由类 对于你的问题,这里有一个片段 转到/application/config/routes.php 并加上:

$route['france'] = 'show/place/1';
在.htaccess文件中,只需删除index.php

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond $1 !^(index\.php|images|img|css|js|robots\.txt)
RewriteRule (.*) index.php?/$1 [L] 

您是否也将config.php$config['index_page']设置为空

更改
$config['index_page']='index.php'


至->
$config['index_page']=''

谢谢,但我已经做了,但我有一个内部服务器错误。我总是有404错误。我真的迷路了,我在许多其他项目中使用了这种重定向类型,它工作得很好。是否可能是因为我的CI配置?是的,问题似乎是由于CI路由机制。尝试放置
$config['uri_protocol']='ORIG_PATH_INFO'
在你的
应用程序/config/config.php
中,我现在没有任何错误,但我总是重新登录到主页。我的意思是将
$config['uri_protocol']
更改为
$config['uri_protocol']='ORIG_PATH_INFO'
在您的
应用程序/config/config.php中,谢谢您的解决方案,但如果需要动态生成uri,我该怎么办?Codeigniter路由系统支持通配符。请阅读提供的参考以了解详细信息。我已经在中找到了在您的帮助下如何处理“France”,但我的问题是:如果我需要动态编写uri,如何使用routes.php?(例如:每次有人在DB上插入一个国家)那么你必须添加一个获取国家的方法。谢谢你的帮助