2012-01-13 31 views
0

我有一个奇怪的问题。我在本地主机上开发我的网站,之后我将其分发给服务器端。大多数情况下,这是按预期工作,但现在注意到一些奇怪的东西,无法弄清楚问题所在。

在服务器上,所有RewriteRule重定向但没有预期的查询。这样的事情是工作的罚款在本地主机,但不是在服务器上:

RewriteEngine叙述在 .... ....

RewriteRule ..... 

编辑:更改的条目为安全起见,对不起!

.... ....

有谁知道这是怎么回事?我想念什么?为什么查询不通过?它是一个服务器配置吗?在因特网上找不到任何关于它的任何信息。

谢谢您的意见。

编辑:下面的解决方案,第二个评论。与apache首先处理什么有关。

回答

0

这些东西几乎不可能调试。但是mod_rewrite的提供一个功能,你应该建立调查此:

RewriteLog /tmp/rewritelog.txt 
RewriteLogLevel 2 

RewriteLog指令但是不能从.htaccess使用。您需要在虚拟主机或主服务器配置中声明它。如果2级别仍然不足,请尝试3

否则我只是建议你试试RewriteBase,因为你似乎将不同的目录级别与你的规则相匹配。可能再次在子目录中重复您的规则(streambutler/)。 apaches mod_rewrite是独特的,有时在父目录中忽略它们。

+0

海,谢谢你的回复,我明白这一点。但是,我不认为规则本身有什么问题,而是处理这些规则的方式。但为什么它如此不同呢?我会尝试重写基地。谢谢 – Codebeat 2012-01-14 00:02:32

+0

好吧,设置rewritebase,似乎没关系。但问题是还有一个名为streambutler /的目录,服务器上的apache配置检查第一个目录和文件,然后重写规则。所以对现有目录存在混淆。本地服务器首先检查规则,然后检查目录和文件。哎呀!!!!!将重写规则中的名称更改为例如:streambutler/to管理员/并且它正常运行。这头痛的东西和愚蠢的。我在哪里可以改变查找行为? – Codebeat 2012-01-14 00:54:18

+0

从来没有听说过这个。这在Apache版本中至多不同。 – mario 2012-01-14 00:56:38

1

@ Erwinus,您讨论的“Perdir”功能在Apache中是标准的,但不是很好理解。 Apache将探测并打开并读取脚本文件名路径上现有的所有.htaccess文件。 (忽略很少选择的RewriteOptions inherit追逐)它使用最深的.htaccess文件,它发现它具有RewriteEngine On

因此,我会不同于马里奥的观点,因为恕我直言,它几乎不可能获得父目录重写规则来抢占一个子目录集 - Apache的默认行为是忽略父母。我在this blog article更详细地解释。

+1

+1哇,非常丰富。你可以添加一个小的答案,并张贴您的链接http://serverfault.com/questions/214512/everything-you-ever-wanted-to-know-about-mod-rewrite-rules-but-were-afraid-to - 以及? – mario 2012-01-14 14:28:50

+0

@mario,很抱歉,我最终写了一篇文章。正如我在那里说过的,我已经将它做成了一个个人项目,以深入了解mod_rewrite的工作原理,并且我仍然有一点要去。我想用我在这里用stackoverflow思考Q的一些细微差别来修改它。我想强调一点,在.htaccess过程中使用mod_rewrite与根配置使用非常不同,几乎需要给出它自己的单独处理。 – TerryE 2012-01-14 16:59:57

+0

很酷。非常感谢!这也是Serverfault的参考答案,所以专家知识越多越好。 PerDir是我上周偶然发现的事情。 (更有意思的是,我曾经为一个基于PHP的web服务器编写了'mod_rewrite'重新实现,但是从来没有涉及到这么多内在细节。) – mario 2012-01-14 17:19:05

相关问题