2011-07-21 16 views
0

PHPアプリケーションでCakePHPを使用しています。デフォルトではCakePHPはリダイレクト後にURLから "?url ="を削除します

それが.htaccessファイルにこれを置く:

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

このルールの後、私はこれをやっている:

http://domain.com/community/view/171/?url=resources/view/171/ 

RedirectMatch ^/resources(.*)$ http://domain.com/community$1 [QSA,R=permanent,L] 

をこれは、リダイレクトされたURLになります

cakephpのルーティングを壊さずに、追加された "?URL ="を取り除くにはどうすればいいですか?

+0

あなたは[CakePHPのルート]を使用して考えがあります(http://book.cakephp.org/view/945/Routes-Configuration#Defining-Routes-948)代わりに? – deizel

+0

彼らは私が望んでいたことを、この点でやっていなかったので、私は.htaccessを使いました。しかし、ルートの提案があれば、私はすべての耳です。 – benhowdle89

+0

1) 'RedirectMatch ^/resources(。*)$ ...'が間違っています。 'RewriteRule ^(。*)$ index.php?url = $ 1 [QSA、L]'行の上でこの規則を守っていたはずです – LazyOne

答えて

1

ご質問が正しく分かった場合は、/community/*へのリクエストをResourcesControllerに送信したいと考えています。あなたはapp/config/routes.phpに以下を追加することでこれを達成することができます。

/** 
* Rename /resources/* to /community/* 
*/ 
Router::connect('/community', array('controller' => 'resources')); 
Router::connect('/community/:action/*', array('controller' => 'resources')); 

二番目のルールはResourcesControllerに一致する要求をマッピングし、また、アクションに渡して、魔法のほとんどを行います。 。逆です

echo $this->Html->link('View community', array(
    'controller' => 'resources', 
    'action' => 'view', 
    $id 
)); 
// outputs a link to `/community/view/171` 

最初のルールは、ルートURLのうち、アクション名を維持するだけであり(つまりそうHtmlHelperリンク:あなたはまた、逆ルーティングを活用することができます上記のアプローチで

ルートは/community/indexの代わりに/communityになります)。


あなたもSEOの目的のために古い/resources*スタイルのリンクをリダイレクトするために探している場合は、次のようにトリックを行う必要があり、LazyOneさんのコメントフォローアップ:

# app/webroot/.htaccess 
<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^/resources(.*)$ /community$1 [R=301,L] # permanent redirect 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
</IfModule>