所以,我已经设置了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
答案 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。