2008-12-31 99 views
2

我剛剛部署了一個使用Zend Framework的新網站。由於我的教程很受歡迎,我希望將對教程的任何請求重定向到新網站上的相關頁面。到目前爲止,這是我有:如何在Zend Framework中使用mod_rewrite?

URL重寫前:重寫後http://neranjara.org/tutorials/?tid=56

網址:http://neranjara.org/article/id/56

的.htaccess文件我嘗試使用看起來像這樣:

 
    $ cat html/.htaccess 
    RewriteEngine on 

    RewriteRule tutorials/\?tid=(.*)$ /article/id/$1 [R=301] 
    RewriteRule !\.(js|ico|gif|jpg|png|css|xml|phps)$ index.php 

但是這個規則不匹配任何網址...:'(

是否有任何人在這裏看到一個問題

回答

3

查詢字符串(傳遞給您文件的參數)將不在RewriteRule中。

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule摘自:

格局將不匹配 對查詢字符串。相反,您必須使用 %{QUERY_STRING}變量的RewriteCond。然而,您可以在 替換字符串中創建URL,其中包含 查詢字符串部分。只需在替換 字符串內使用 問號,表示應將下列 文本重新注入 查詢字符串中。當您想要刪除現有查詢字符串 時,只需使用 問號結束 替換字符串。要將新查詢 字符串與舊的字符串合併,請使用[QSA] 標誌。

你這裏有兩種可能性:

  1. 繼續你的框架,而不是之前的刪除重寫規則第一,做在你的index.php覈查。最初的查詢應該在$_SERVER['REQUEST_URI']或類似的東西中可用。所以,驗證它是否是教程,採取TID參數,然後去和重定向:

    header("Location: http://http://neranjara.org/article/id/$id"); 
    exit(); 
    
  2. 使用用的RewriteCond%{QUERY_STRING},而不是作爲Apache文檔中所述。此解決方案在線程中討論,如this one

//編輯:

看一看Chris' answer誰還跟詳細使用QUERY_STRING的解決方案。這可能是你想要使用的。謝謝克里斯。

-1

Zend使用htaccess可以提供的所有htaccess功能,因此這些方法非常方便(可鏈接且有趣且沒有很好記錄),可以在bootstrap中實現此功能!

你必須在引導程序(index.php)中使用Zend路由器。大概是這樣的:(這將是foo.com/article/23

$路由器= $ frontController-> getRouter();

$路線=新 Zend_Controller_Router_Route中( 「文/:ID 」, 陣列( 'ID'=> 1)); $路由器 - > addRoute( '文章',$路線);

更多信息here

3

基於你前僱主OU的條目:

$ cat html/.htaccess 
    RewriteEngine on 

    RewriteRule tutorials/\?tid=(.*)$ /article/id/$1 [R=301] 
    RewriteRule !\.(js|ico|gif|jpg|png|css|xml|phps)$ index.php 

我建議使用這個代替:

$ cat html/.htaccess 
    RewriteEngine on 

    RewriteCond %{QUERY_STRING} ^tid=([^&]*) 
    RewriteRule tutorials/ /article/id/%1 [R=301, L] 

    RewriteRule !\.(js|ico|gif|jpg|png|css|xml|phps)$ index.php [L] 

BTW,這只是許多事情可以做使用的mod_rewrite的QUERY_STRING變量的例子。我的投票是'lpfavreau',因爲這是他們答案中的選項#2。

相關問題