mod_rewrite noobie问题

时间:2009-08-24 08:43:08

标签: apache mod-rewrite

所以,我已经设置了Zend风格的前控制器。基本上它只是将每个URL重定向回索引。

网址采用/ controller/view/ + [additional parameters]

的形式

我想以下列形式创建一些快捷方式:

RewriteRule ^home /home/index
RewriteRule ^products /products/view

RewriteRule .* index.php

然而,mod_rewrite似乎忽略了我的重写规则。它并没有改变回家/索引的主页,尽管我很确定它应该能够捕捉到这一点。所以,我认为它与重命名请求uri有关?

这是.htaccess文件:

Options +FollowSymLinks
RewriteEngine on

RewriteRule  ^admin/  -  [L]
RewriteRule  ^media/  -  [L]

RewriteRule  ^home        home/index
RewriteRule  ^products    products/view

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php

3 个答案:

答案 0 :(得分:0)

以下规则捕获所有内容,因此如果它位于顶部,则永远不会考虑任何其他规则。

RewriteRule .* index.php

尝试以下

Options +FollowSymLinks
RewriteEngine on

RewriteRule  ^admin/      -  [L]
RewriteRule  ^media/      -  [L]

RewriteRule  ^home        home/index [L]
RewriteRule  ^products    products/view [L]

RewriteCond  %{REQUEST_FILENAME} !-f
RewriteRule  .*           index.php

答案 1 :(得分:0)

当您尝试重写以/home/home/index开头的所有内容时,您可能会遇到问题,因为后者也会以/home开头。您应该使用更具体的模式:

RewriteRule ^home$ home/index
RewriteRule ^products$ products/view

但其余的应该可以正常工作。

答案 2 :(得分:0)

到目前为止,我已经想到了这么多。

如果您使用RewriteRule来改变REQUEST_URI,它实际上不会改变REQUEST_URI,而是另一个名为REDIRECT_URI的变量。这就解释了为什么nothng正在发生。

另外,有趣的是,我可以这样做:

RewriteRule ^products products/view [NC,L]

Fabian提出了这种效果。他只是将index.php附加到最后,这对我不起作用。如果我把index.php排除在外,一切都很完美。不知何故,它将所有内容重定向到index.php。

所以现在,一切正常,但我还不知道为什么一切正常。对于任何能够解释这里发生的事情的人来说,绝对是一个赞成。直到那时我想我只是RTFM。