Zend Framework ile mod_rewrite nasıl kullanılır?

3 Cevap php

Ben sadece Zend Framework kullanarak yeni bir site dağıtmış ettik. Nedeniyle benim öğreticiler popülerlik ben yeni sitede, ilgili sayfaya bir eğitim için herhangi bir talebi yönlendirmek istiyorum. Şimdiye kadar bu bende ne olduğunu:

URL Rewrite önce: http://neranjara.org/tutorials/?tid=56

URL Rewrite sonra: http://neranjara.org/article/id/56

. Böyle görünüyor kullanmak için çalışılıyor htaccess dosyası:

  $ cat html/.htaccess
  RewriteEngine on

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

Ancak bu kural, herhangi bir URL eşleme değildir ...: '(

Herhangi bir burada bir sorun görüyor mu?

3 Cevap

Önceki girişi dayanarak:

  $ cat html/.htaccess
  RewriteEngine on

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

Ben bunun yerine kullanarak öneririm:

  $ 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, bu mod_rewrite QUERY_STRING değişkeni kullanarak yapabileceği birçok şey sadece bir örnektir. Bu onların cevap aksam # 2 beri benim oy 'lpfavreau' gider.

Sorgu dizesi (dosyanıza iletilen parametreler) RewriteRule olmayacaktır.

Alınan http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule:

The Pattern will not be matched against the query string. Instead, you must use a RewriteCond with the %{QUERY_STRING} variable. You can, however, create URLs in the substitution string, containing a query string part. Simply use a question mark inside the substitution string, to indicate that the following text should be re-injected into the query string. When you want to erase an existing query string, end the substitution string with just a question mark. To combine a new query string with an old one, use the [QSA] flag.

Burada iki ihtimal var:

  1. Yerine çerçevede devam etmeden önce ilk RewriteRule kaldırmak ve index.php doğrulama yapmak. İlk sorgusu $_SERVER['REQUEST_URI'] ya da bunun gibi bir şey mevcut olmalıdır. O tutorials, tid parametre alır ve sonra bir yönlendirme ile devam yüzden eğer doğrulamak:

    header("Location: http://http://neranjara.org/article/id/$id");
    exit();
    
  2. Apache belgelerinde belirtildiği gibi yerine% {QUERY_STRING} ile RewriteCond kullanın. Bu çözüm this one gibi parçacığı tartışılmıştır.

// Edit:

QUERY_STRING kullanarak tür yeterli detaylara çözüm oldu Chris' answer bakabilirsiniz. Eğer bu kullanmak isteyeceksiniz muhtemelen ne olduğunu. Teşekkürler Chris.

Zend htaccess sunabilirsiniz tüm htaccess gücü çok bootstrap bu başarmak için çok kullanışlı (chainable ve ilginç ve çok iyi belgelenmiş değil) yöntemini gidecekseniz kullanır!

Sen bootstrap (index.php) olarak Zend yönlendirici kullanmanız gerekmektedir. Muhtemelen gibi bir şey: (bu foo.com/article/23 olurdu

$router = $frontController->getRouter();

$route = new Zend_Controller_Router_Route( 'article/:id', array('id' => 1) ); $router->addRoute('article', $route);

Daha detaylı bilgi here