Apache 修改noobie问题

Apache 修改noobie问题,apache,mod-rewrite,Apache,Mod Rewrite,我已经安装了Zend风格的frontcontroller。基本上,它只是将每个url重定向回索引 URL的格式为/controller/view/+[附加参数] 我想以以下形式创建一些快捷方式: RewriteRule ^home /home/index RewriteRule ^products /products/view RewriteRule .* index.php 然而,mod_rewrite似乎忽略了我的重写规则。它不会改变home-to-home/索引,尽管我相当确定它应该能

我已经安装了Zend风格的frontcontroller。基本上,它只是将每个url重定向回索引

URL的格式为/
controller/view/+[附加参数]

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

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

RewriteRule .* index.php
然而,mod_rewrite似乎忽略了我的重写规则。它不会改变home-to-home/索引,尽管我相当确定它应该能够捕捉到这一点。所以,我认为这与重命名请求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

下面的规则抓住了一切,所以如果它在顶部,它将永远不会考虑任何其他规则。

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

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

RewriteRule ^home$ home/index
RewriteRule ^products$ products/view
RewriteRule ^products products/view [NC,L]

但是其余的应该可以用。

到目前为止,我已经计算了这么多

如果使用RewriteRule更改
请求URI
,它实际上不会更改
请求URI
,而是另一个名为
重定向URI
的变量。这就解释了为什么什么都没有发生

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

RewriteRule ^home$ home/index
RewriteRule ^products$ products/view
RewriteRule ^products products/view [NC,L]
费边提出了这样的建议。他只是在末尾附加index.php,这对我不起作用。如果我不使用index.php,那么一切都可以完美地工作。它神奇地将所有内容重定向到index.php


所以现在,一切都在运转,但我不知道为什么一切都在运转。任何能解释这里发生的事情的人都会投赞成票。在那之前,我想我只需要RTFM

是的,“将所有内容重定向到索引”位仅位于末尾。很抱歉。但是仍然不起作用..您可以添加整个.htaccess文件吗?这样做会更简单。规则根本不起作用,或者只是预期的结果错误(index.php无法处理)?如果是后者,
$\u服务器['REQUEST\u URI']
包含什么值?$\u服务器['REQUEST\u URI']包含原始URI(主URI或产品)。这就像它无法更改请求URI,即使我确信它能够捕获它。因此,当它到达将所有内容重定向回index.php的最后一行时,它会将其视为未更改。嗯,请求URI应该保持不变,因为您正在重写而不是重定向。如果你想要请求URI,你可以为它写一行。你没有代表家庭和产品线最后一条规则的[L]。这意味着它将继续寻找任何其他匹配项。我已经调整了我的答案。@JHollanti:这似乎是问题所在。frontcontroller使用
$\u服务器['REQUEST\u URI']
获取请求的URI,但该变量不会因内部重定向而更改。只有外部重定向(R标志)可以做到这一点。