以下问题是一个问题:我在CodeIgniter设置中将问题跟踪到自定义路由配置中的错误。该问题与mod_rewrite
无关。请忽略。
以下是我的mod_rewrite
规则的简化版本(在根.htaccess
文件中):
RewriteCond %{REQUEST_URI} !^/codeigniter/index.php* [NC]
RewriteRule ^(.*)$ /index.php [QSA,NC,L,R]
当我传递以下网址时:
http://ssilogicserver.webhop.net/codeigniter/index.php/dashboard/index
...网址似乎路由到:
http://ssilogicserver.webhop.net/codeigniter/index.php
(请注意,最终的/dashboard/index
似乎被剥离了。)
以下是mod_rewrite
日志输出的片段:
[...] applying pattern '^(.*)$' to uri 'codeigniter/index.php/dashboard/index'
[...] RewriteCond: input='/codeigniter/index.php/dashboard/index' pattern='!^/codeigniter/index.php*' [NC] => not-matched
[...] pass through L:/daniel347x/__Dan_Root/ssilogicserver_web/ssilogicserver_web/codeigniter/index.php
请注意,即使规则不匹配,“通过”的网址也是TRUNCATED!
(另请注意,关于上面的第三行,文档根目录是L:/daniel347x/__Dan_Root/ssilogicserver_web/ssilogicserver_web/
。另请注意,上面三行是连续出现的。)
我上面发布的.htaccess
文件实际上只是真实内容的片段;同样,我提供的mod_rewrite
日志的输出也是一个片段。在我的真实场景中,我实际上是首先在浏览器中传递http://ssilogicserver.webhop.net/codeigniter/index.php
,这是第一次(我认为成功)通过http://ssilogicserver.webhop.net/codeigniter/index.php/dashboard/index
规则重新路由到mod_rewrite
以上列出的;后一个URL是有问题的URL。
我真正的问题是循环重定向。但是,我想我已将问题与我上面粘贴的mod_rewrite
日志文件中的行隔离开来。事实上,如果我没有在这个问题中提供足够的上下文 - 或者我是否必须创建一个小的,独立的,可重现的测试用例以及完整 .htaccess
文件和< strong>完整 mod_rewrite
日志文件 - 我会这样做(但这需要一段时间,所以我从这个问题开始)。
事实上,如果我已正确隔离相关详细信息,那么我的问题是:为什么mod_rewrite“通过”截断的网址,即使没有mod_rewrite
规则似乎匹配
(注意: 文件位于codeigniter/index.php
,所以也许这是相关的。)
答案 0 :(得分:1)
这是你的规则:
RewriteCond %{REQUEST_URI} !^/codeigniter/index.php* [NC]
RewriteRule ^(.*)$ /index.php [QSA,NC,L,R]
实际上,如果仔细观察,规则就是按照它所做的去做。您的规则是,如果请求URI不是以/codeigniter/index.php
开头,则会重定向到/index.php
。
由于此处有R
标志,因此它正在对/index.php
进行外部重定向,并在此过程中去除当前的REQUEST_URI ..
你可能意味着:
RewriteCond %{REQUEST_URI} !^/codeigniter/index\.php [NC]
RewriteRule ^(.*)$ index.php/$1 [L,R]