2

Zend Framework を使用して新しいサイトをデプロイしました。私のチュートリアルは人気があるため、チュートリアルのリクエストを新しいサイトの関連ページにリダイレクトしたいと思います。これまでのところ、これは私が持っているものです:

書き換え前のURL: http://neranjara.org/tutorials/?tid=56

書き換え後のURL:http: //neranjara.org/article/id/56

使用しようとしている .htaccess ファイルは次のようになります。

  $ 猫 html/.htaccess
  RewriteEngine on

  RewriteRule チュートリアル/\?tid=(.*)$ /article/id/$1 [R=301]
  RewriteRule !\.(js|ico|gif|jpg|png|css|xml|phps)$ index.php

しかし、このルールはどの URL とも一致しません... :'(

ここに問題がある人はいますか?

4

3 に答える 3

3

以前のエントリに基づいて:

  $ 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]

ところで、これはQUERY_STRINGmod_rewrite で変数を使用して実行できる多くのことのほんの一例です。これは彼らの答えからのオプション#2であるため、私の投票は「lpfavreau」に行きます。

于 2009-01-02T05:08:16.413 に答える
3

クエリ文字列 (ファイルに渡されるパラメーター) は RewriteRule には含まれません。

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriteruleから取得:

パターンはクエリ文字列と照合されません。代わりに、%{QUERY_STRING} 変数で RewriteCond を使用する必要があります。ただし、クエリ文字列部分を含む置換文字列で URL を作成することはできます。置換文字列内で疑問符を使用するだけで、次のテキストをクエリ文字列に再挿入する必要があることを示します。既存のクエリ文字列を消去する場合は、置換文字列を疑問符だけで終了します。新しいクエリ文字列を古いクエリ文字列と組み合わせるには、[QSA] フラグを使用します。

ここには 2 つの可能性があります。

  1. フレームワークに進む前に、最初の RewriteRule を削除し、代わりに index.php で検証を行ってください。最初のクエリは、またはそのようなもので利用できるはずです$_SERVER['REQUEST_URI']それがtutorialsかどうかを確認し、tidパラメータを取得してから、リダイレクトを続行します。

    header("Location: http://http://neranjara.org/article/id/$id");
    exit();
    
  2. Apache ドキュメントに記載されているように、代わりに %{QUERY_STRING} で RewriteCond を使用してください。この解決策は、このようなスレッドで議論されています。

// 編集:

QUERY_STRING を使用して解決策を詳しく説明してくれたChris の回答をご覧ください。これはおそらくあなたが使いたいものです。ありがとうクリス。

于 2008-12-31T19:34:21.393 に答える
-1

Zend は、htaccess が提供できるすべての htaccess パワーを使用するため、ブートストラップでこれを実現するための非常に便利な (連鎖可能で興味深いがあまり文書化されていない) メソッドがあります。

ブートストラップ (index.php) で Zend ルーターを使用する必要があります。おそらく次のようなものです: (これは foo.com/article/23 になります

$router = $frontController->getRouter();

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

詳細はこちら

于 2008-12-31T19:39:52.490 に答える