2012-03-16 87 views
4

最近2天我试图在我的电脑上运行一些应用程序(Ubuntu 11.10,Apache/2.2.20(Ubuntu),PHP版本5.3.6-13ubuntu3.1)。它是在PHP Smarty中创建的,它使用重写规则。一切工作正常与像链接:mod_rewrite添加php扩展?

localhost/news

它正确地翻译成

localhost/news.php

应该怎么做。但问题是像

localhost/message/inbox

更复杂的环节,应该用规则翻译:

RewriteRule ^messages/(.*)$ /messages.php?action=$1

但它不工作。我试图调试它。我也会唱上记录在http.conf中

RewriteLog "/home/krzysztofp/rewrite.log" 
RewriteLogLevel 3

什么,我可以看到的是,在开始时有

127.0.0.1 - - [16/Mar/2012:15:56:36 +0100] [krzysztofp/sid#7f8218546a30][rid#7f821837a0a0/subreq] (3) [perdir /var/www/engbook/] add path info postfix: /var/www/engbook/messages.php -> /var/www/engbook/messages.php/inbox

,然后它试图匹配message.php

127.0.0.1 - - [16/Mar/2012:15:56:36 +0100] [krzysztofp/sid#7f8218546a30][rid#7f821837a0a0/subreq] (3) [perdir /var/www/engbook/] applying pattern '^messages/(.*)$' to uri 'messages.php/inbox'

虚拟主机:

<Directory /var/www/engbook> 
Options Indexes FollowSymLinks MultiViews 
AllowOverride All 
Order allow,deny 
allow from all 
</Directory> 

任何想法为什么它发生?

编辑: 我已经把所有的重写规则在堆栈中的问题,所以在这里,他们是:他们 http://pokazkod.pl/d52823d5f0d31ff26e1e29873383d2a2ceb216306a56b3aec1 没有看起来很可疑对我说:/

+1

请留言你的重写规则 – scibuff 2012-03-16 15:28:15

+0

当你说它不起作用时,你的意思是什么?你得到一个错误?你得到错误的页面?错误的输出?我使用了你的规则,当我进入'/ messages/inbox'时,它调用'messages.php?action = inbox'就好了。 – roychri 2012-03-16 17:14:37

+0

这就是我期望的规则,但不知何故,它只是调用messages.php而没有?action = inbox。在messages.php中有$ _GET ['action']的开关语句,我可以看到变量$ _GET为空... 我认为这是配置Apache的问题,但我找不到它到底在哪里。 – krzysiek 2012-03-17 10:42:43

回答

8

尝试删除MultiViews

<Directory /var/www/engbook> 
    Options Indexes FollowSymLinks 
    AllowOverride All 
    Order allow,deny 
    allow from all 
</Directory> 
+1

OP没有接受这一点,但我刚刚有同样的问题,并删除MultiViews解决了它,所以欢呼的帖子。 – M1ke 2013-01-16 14:23:34

+1

谢谢@afanasy。它帮助我找出了我的重写规则问题 – 2013-04-11 15:51:58