Zend Framework 2 URL重写

时间:2014-03-11 13:15:40

标签: php .htaccess zend-framework mod-rewrite zend-framework2

我使用Zend Framework 2和提供的.htaccess进行网址重写,如下所示:

RewriteEngine On
# The following rule tells Apache that if the requested filename
# exists, simply serve it.
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
# The following rewrites all other queries to index.php. The
# condition ensures that if you are using Apache aliases to do
# mass virtual hosting, the base path will be prepended to
# allow proper resolution of the index.php file; it will work
# in non-aliased environments as well, providing a safe, one-size
# fits all solution.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]

此外,我的路线定义如下:/customers/8080/edit。现在我需要根据/customers/edit/8080访问此路由。附加URL应该是别名,而不是简单的重定向。

因为我的路由已经非常复杂,所以在module.config.php中重写我的路由实际上是没有选择的。我认为实现这一目标的最简单方法是在我的.htaccess中添加重写条件,并定义路由/customers/edit/8080,只需映射到/customers/edit/8080

由于ZF将每个网址重定向到index.php,因此我不得不定义我的别名路由。

任何建议都很棒(:

2 个答案:

答案 0 :(得分:0)

我正在处理一个非常类似的问题,但是我继承了Zend的安装,所以我不知道"开箱即用的问题"安装看起来像。

我(有点)通过添加" baseURL"来解决我的问题。 application.ini文件中的参数。在这里查看我的问题和解决方案,它可能有帮助。 Moving Zend Framework site to new host - "An error occurred Page not found"

注意:我对结果并不是100%满意。我还在努力,但我已经接近了。

答案 1 :(得分:0)

只需在RewriteRule文件中添加文字.htaccess即可解决此问题。这是我最初尝试使其工作的原因,但我并没有省略模式部分中的前导斜杠。

所以这就是我想出来的:

RewriteRule ^customers/([0-9]+)/base/edit/([0-9]+)/?$ /customers/$1/edit/base/$2 [NC,L,P]

考虑指定[P]标记,如果不应更改网址,则将请求作为代理请求处理。

另见this question.