0

私は多くの検索を行い、いくつかのチュートリアルを行いました。どのように機能するかはわかっていると思いますが、機能していません。CakePHP の rewriteRule がどうなっているのか知っている人はいますか? それに「問題」はありますか?

ところで、私は Router::connect を使おうとして始めましたが、それも実現できませんでした。どちらの解決策も喜んで受け入れます。

目標: 不器用な古いクエリ文字列 (?action=show&id=3) をグルーヴィーな CakePHP の URL (/show/3) にルーティングまたはリダイレクトして、たとえば、Cake への切り替えが完了しても既存のブックマークが引き続き機能するようにする。キャプチャする必要があるのは、id= ビットの数字だけです。

rewriteRule (webroot の .htaccess) での私の最新の試みは次のとおりです。

RewriteRule id=([0-9]+)$ /Features/view/%1 [R=301,L]

正確には何もしません。

Router::connect での私の最新の試みは次のとおりです。

Router::connect(
'index.php?action=show&id=:id',
array('controller' => 'features', 'action' => 'view'),
array('pass'=>array('id'),'id' => '[0-9]+')
);

何もしません。私は今、3 つの長い夜を、読書、試み、そして失敗に費やしてきました。私はあなたの助けの準備ができています。

4

1 に答える 1

1

私は CakePHP できれいでない URL を使用したことがないので、ルーターについてはあなたを助けることはできませんが、mod_rewrite.

書き換え試行の問題は、URI のパス部分のみに一致することです。クエリ文字列RewriteRuleに一致させたい場合は、次のような変数を使用する必要があります。RewriteCond%{QUERY_STRING}

RewriteCond %{QUERY_STRING} id=(\d+)$
RewriteRule ^.*$ /Features/view/%1? [R=301,L]

書き換えルール置換部分の最後にあることを忘れない?でください。これにより、元のクエリ文字列が追加されないことが保証されます。この場合、クエリとパスの一致ルールが非常に緩いため、無限ループにつながる可能性があります。次のように、ルールをもう少しきつくすることができます。

RewriteCond %{QUERY_STRING} ^action=show&id=(\d+)$
RewriteRule ^index\.php$ /Features/view/%1? [R=301,L]

ただし、これはもちろん特定の URI に依存するため、これを基本的な出発点として参照してください。

于 2013-06-25T23:45:29.923 に答える