Apache mod“U rewrite不”;通过;没有规则匹配时的完整URL:为什么?
下面的问题是一个令人费解的问题:我在CodeIgniter设置中跟踪到了自定义路由配置中的一个bug。该问题与Apache mod“U rewrite不”;通过;没有规则匹配时的完整URL:为什么?,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,下面的问题是一个令人费解的问题:我在CodeIgniter设置中跟踪到了自定义路由配置中的一个bug。该问题与mod\u rewrite无关。请忽略。 下面是我的mod_rewrite规则的简化版本(在根.htaccess文件中): 当我传递以下URL时: http://ssilogicserver.webhop.net/codeigniter/index.php/dashboard/index 。。。URL似乎被路由到: http://ssilogicserver.webhop.net/c
mod\u rewrite
无关。请忽略。
下面是我的
mod_rewrite
规则的简化版本(在根.htaccess
文件中):
当我传递以下URL时:
http://ssilogicserver.webhop.net/codeigniter/index.php/dashboard/index
。。。URL似乎被路由到:
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
请注意,“通过”的URL被截断,即使规则不匹配强>
(另外,请注意,关于上面的第三行,文档根目录是L:/daniel347x/\uuu Dan\u root/ssilogicserver\u web/ssilogicserver\u web/
。还要注意,上面三行是连续出现的。)
我上面发布的.htaccess
文件实际上只是真实内容的一个片段;同样,我提供的mod_rewrite
日志的输出也是一个片段。在我的真实场景中,我实际上是通过传递http://ssilogicserver.webhop.net/codeigniter/index.php
在浏览器中,这是第一次(我想是成功地)重新路由到http://ssilogicserver.webhop.net/codeigniter/index.php/dashboard/index
通过mod_rewrite
规则,我没有在上面列出;后一个URL就是问题所在
我真正的问题是循环重定向。然而,我想我已经将问题隔离到了我上面粘贴的mod_rewrite
logfile的行中。事实上,如果我在这个问题上没有提供足够的上下文,或者如果我创建一个小型的、独立的、可复制的测试用例以及full.htaccess文件和fullmod_rewrite
日志文件很重要,我会这样做(但这需要一段时间,所以我从这个问题开始)
如果,事实上,我已经正确地隔离了相关的细节,那么我的问题是:为什么mod_rewrite“通过”一个被截断的URL,即使没有mod_rewrite
规则似乎匹配
(注意:在codeigniter/index.php中有一个文件,所以这可能是相关的。)以下是您的规则:
RewriteCond %{REQUEST_URI} !^/codeigniter/index.php* [NC]
RewriteRule ^(.*)$ /index.php [QSA,NC,L,R]
实际上,如果仔细观察,规则正在执行它被告知要执行的操作。您的规则说,如果请求URI不是以/codeigniter/index.php
开头,则重定向到/index.php
因为这里有R
标志,所以它正在执行一个到/index.php
的外部重定向,并在这个过程中剥离出当前的请求URI
你可能是说:
RewriteCond %{REQUEST_URI} !^/codeigniter/index\.php [NC]
RewriteRule ^(.*)$ index.php/$1 [L,R]
但是,RewriteRule
永远不应该被激活,因为RewriteCond
不匹配,对吗?这个.htaccess在/codeigniter/
的父目录中,对吗?…添加反斜杠没有什么区别。你确定在索引\.php
中需要反斜杠吗?哦,是的,点表示正则表达式中的任何字符at需要一直被转义。您是否仍然将/codeigniter/index.php
视为最终URL而不是/codeigniter/index.php/dashboard/index
?您也很想知道为什么要在浏览器中将domain.com/codeigniter/index.php/dashboar/index>显示为URL?应该是:domain.com/dashboard/索引
?
RewriteCond %{REQUEST_URI} !^/codeigniter/index\.php [NC]
RewriteRule ^(.*)$ index.php/$1 [L,R]