2013-10-14 76 views
0

我有一个Zend Framework 2应用程序,我希望使用.htaccess重写一些URL。 .htaccess文件位于我的公用文件夹中。 我已经验证其重写所有testurl到test.php的Zend Framework 2重写URL

RewriteRule ^testurl/?$ test.php [NC] 

的test.php的文件也是在公用文件夹一个简单的重写规则。 我将此规则放在Zend规则之上,以将所有URL映射到.htaccess中的index.php。

我的问题是我如何重写这个在索引模块中说SearchController? 我曾尝试过各种重写规则,标志不同,如

RewriteRule ^testurl/?$ /index/search [NC] 
and 
RewriteRule ^testurl/?$ index/search [NC] 

,但我总是得到404错误 所请求的网址无法通过路由匹配。

我希望使用.htaccess的原因是我将在重写规则中使用正则表达式来捕获几个不同的URL。

非常感谢

回答

0

要么你想:

RewriteRule ^testurl/?$ /index/search [NC,L,R] 

,或者您需要在Zend和路由到SearchController添加路线testurl

+0

非常感谢。这很好。我尝试过[NC,L]标志,但它没有工作,我认为L是问题,因为URL需要由我的.htaccess中的Zend重写规则来处理。为什么R,我知道是一个临时重定向到URL使这个工作?再次非常感谢 – user12345

+0

@ user12345没有'R',它在内部重写了URI。这通常意味着在'/ index/search'处必须有一个物理资源,但是这里有一个Zend路由,它需要通过Zend的路由系统才能正确解释。内部重写通常不会削减它,所以需要外部重定向。或者,您可以创建一个新路线,或者使用反向代理请求的'P'标记,并且不会更改浏览器地址栏中的URL(只能在加载mod_proxy的情况下运行) –

+0

啊我明白了。我认为P标志是我寻找的,因为我希望URL保持不变。非常感谢 – user12345