2016-10-04 122 views
0

我使用ZF2编写应用程序,并在项目结束时使用了一些htaccess重写规则,这些规则允许我从应用程序url中删除public关键字。我在互联网教程中发现了这个规则,它工作正常,但我试图添加我自己的映射,他们不工作。这是我的.htaccess文件的内容:Zend Framework 2 Mod在htaccess中的重写不起作用

RewriteEngine On 

RewriteRule ^\.htaccess$ - [F] 

RewriteCond %{REQUEST_URI} ="" 
RewriteRule ^.*$ /public/index [NC,L] 

RewriteCond %{REQUEST_URI} !^/public/.*$ 
RewriteRule ^(.*)$ /public/$1 

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^.*$ - [NC,L] 

RewriteRule ^public/.*$ /public/index [NC,L] 

我想添加规则

RewriteRule ^test-test-test-test-providers$ /providers?localisation=$2&serviceType=$4 [NC,L] 

在文件的最后一行,但检查后,Zend公司是给我,请求的URL不能被纠错在映射中找到。

回答

0

您是否尝试过在公共目录添加:

RewriteRule ^test-test-test-test-providers$ /public/providers 
+0

嗨安德鲁,谢谢你的回答。是的,我试图添加'/ public /'映射,但它仍然无法工作。 –

0

有你为什么通过htaccess的删除公用理由吗?首选解决方案是将您的域的主目录设置为公用文件夹,如https://framework.zend.com/manual/2.4/en/ref/installation.html所述 - 还有一个关于htaccess文件的建议。但是,当前的设置也起作用时,这不是必需的。

Zend给我错误,请求的URL无法在映射中找到 这一个很重要。我假设你的意思是错误来自于Zend框架(Zend只是一家公司,它也可能是Zend)。这意味着,您的请求直接发送到Zend Framework。直接在路由配置中使用路由而不是使用htaccess规则重映射它会更好吗?

如果Zend Framework仍在使用“test-test-test-test-providers”进行路由,那么这可能是可能的。如果是这样,你应该在你的路由配置中使用它,或者测试一个重定向而不是一个RewriteRule;但这意味着URL中的“测试 - 测试 - 测试 - 提供者”将被“提供者”所取代。

+0

嗨av3,你的想法很简单,我可能会这样做你的方式,但我的目标是通过htaccess文件做映射:) –

+0

通过htaccess的另一种方式是重定向(301),但我认为你想在你的URL中保留“test-test-test-test-providers”。 问题可能在于,路由器使用该URL,并且重写后该URL不会更改。这就是为什么路由器给你错误的地方,在你的映射中找不到URL。但我不确定;可能有助于调试和检查路由器真正使用的URL。 – av3