2016-10-04 124 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