Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache mod“U rewrite不”;通过;没有规则匹配时的完整URL:为什么?_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache mod“U rewrite不”;通过;没有规则匹配时的完整URL:为什么?

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

下面的问题是一个令人费解的问题:我在CodeIgniter设置中跟踪到了自定义路由配置中的一个bug。该问题与
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文件和full
mod_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]