2011-10-25 12 views
1

クエリ文字列のリンクスキーム(つまり、?page = aboutまたは?page = individual & i = johndoe)に基づいて作成されたウェブサイト全体があります。もちろん、振り返ってみると、SEOにもっと親しみやすい(つまり、/ about/or/individual/johndoe /)ように、別の(美しい)スキームを使用することに決めました。美しいクエリ文字列URLの使い方

Apacheの.htaccessファイルでmod_rewriteを使用して、サイト全体のすべてのリンクを変更することなくこの変更を行う方法はありますか?たとえば、?page = aboutへのリンクをクリックすると、/ about /にリダイレクトされます。

私が試したコードは、/ about/as?page = aboutと表示されますが、リダイレクトは必要ありません。そして、正直言って、私はmod_rewriteで何の仕事もしていない(それは少し威圧している)ので、私は間違った方向に行っていると感じています。それにもかかわらず、これまで私がこれまで取り組んできたコードは次のとおりです。

RewriteEngine On 
RewriteRule ^([a-zA-Z0-9_]+)$ /$1/ [R] 
RewriteRule ^([a-zA-Z0-9_]+)/$ /index.php?page=$1 

RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ /$1/$2/ [R] 
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ /index.php?page=$1&i=$2 
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ /index.php?page=$1&id=$2 
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ /index.php?page=$1&bctid=$2 
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ /index.php?page=$1&bclid=$2 

私はどんな助けにも大いに感謝します。

+3

は、機能しません同じパターンのために一致する複数の書き換えルールを持ちますあなたの例では、最初のルールだけがApacheによって選択されるため、下の4はあなたの例のルールを書き換えます。さらに、永久リダイレクトには301リダイレクトを使用する必要があります。 –

答えて

2

最初...書き換えは、書き換え要求にのみ適用されます。その結果、あなたの質問に記載された変更内容は現在のページは、2つの方法でアクセスできるようになります:

/index.php?page=about 
/about/ 

あなたのサイト全体で変更を加えない限り、あなたは本当に皆以来の変化の多くを作ることはありませんことを意味します間違ったURLを指しています。

代わりに、mod_redirectを使用して、新しい形式のURLにユーザーをリダイレクトすると思います。私はあなたのサイトが実際に期待しているバージョンに戻って新しいURLをマップすることができると思います。私はこれがうまくいくと信じて、ループを起こさない。

これは、すべてのページにリダイレクトが存在するため、実際にはより良いURLを直接指しているわけではないため、SEOがあると言われています。それはあなたが望む結果をあなたに与えないかもしれません。別のオプションは、あなたが提供する正規表現を使用し、実際にはすべてのビューで実際のコードを変更することです。あなたのリンクをどのように作っているかによって、それは簡単かもしれません。

幸運。

明確化

あなたは、いくつかの異なるものをしたいと私はあなたの質問をお読みください。

  1. 、おそらくあなたは、あなたのサイトが機能する方法で巨大な何かを変更する必要はありませんが、あなたは(素敵なURLを望みますフレームワークを使用して、このように呼び出されるページを強制します)。これは、醜いURLと素晴らしいURLの両方をサポートする必要があることを意味します。つまり、両方のバージョンが動作するようにmod_rewriteが必要です。
  2. あなたの目標は、検索エンジンのURLを改善することです。つまり、醜いURLを使用するユーザーには、代わりに素晴らしいURLを使用するように促す必要があります。その場合は、おそらくあなたのサイトの古いURLをきれいにする必要があります。そうでない場合、グーグルは醜いURLをクロールし続けるでしょう(それらは見た唯一のものなので)。
  3. 他の人々のURLをクリーンアップすることはできません。そのため、醜いURLへのリンクをあなたの素晴らしいものにmod_redirectする必要があります。そうすれば、Googleは素敵なURLを見つけることができます。 (これは私がよく分からない部分です。mod_redirectとmod_rewriteはループを引き起こしますか?ここに私が終わった何私はないと思うが、それは、その後ない場合のみ、#1、#2は、なんとかなるでしょう、そしてあなたは自分の醜いURLへ
+0

基本的には、書き換えに加えてリダイレクトが必要だと言っていますか?第二に、私は実際に正しいページに行くことはないので、ウェブサイトを見て、新しい標準へのすべてのリンクを変更する必要があります。私はこれについても訂正していますか? – cereallarceny

0
RewriteEngine On 

RewriteRule ^([a-zA-Z0-9_]+)$ /$1/ [NC,R=301] 
RewriteRule ^([a-zA-Z0-9_]+)/$ /index.php?page=$1 

RewriteRule ^(artists)/([a-zA-Z0-9_]+)$ /artists/$2/ [NC,R=301] 
RewriteRule ^(artists)/([a-zA-Z0-9_]+)/$ /index.php?page=individual&i=$2 

RewriteRule ^(photos)/([a-zA-Z0-9_]+)$ /photos/$2/ [NC,R=301] 
RewriteRule ^(photos)/([a-zA-Z0-9_]+)/$ /index.php?page=photogallery&person=$2 

RewriteRule ^(post)/([a-zA-Z0-9_]+)$ /post/$2/ [NC,R=301] 
RewriteRule ^(post)/([a-zA-Z0-9_]+)/$ /index.php?page=post&id=$2 
RewriteRule ^(rss)/([a-zA-Z0-9_]+)$ /rss/$2/ [NC,R=301] 
RewriteRule ^(rss)/([a-zA-Z0-9_]+)/$ /index.php?page=post&rss=$2 
RewriteRule ^(search)/([a-zA-Z0-9_]+)$ /search/$2/ [NC,R=301] 
RewriteRule ^(search)/([a-zA-Z0-9_]+)/$ /index.php?page=post&q=$2 

RewriteRule ^(video)/([a-zA-Z0-9_]+)$ /video/$2/ [NC,R=301] 
RewriteRule ^(video)/([a-zA-Z0-9_]+)/$ /index.php?page=videogallery&bctid=$2 
RewriteRule ^(playlist)/([a-zA-Z0-9_]+)$ /playlist/$2/ [NC,R=301] 
RewriteRule ^(playlist)/([a-zA-Z0-9_]+)/$ /index.php?page=videogallery&bclid=$2 

を指している他の人のサイトと一緒に暮らす必要があるだろうを使用して。これらのフラグがすべて必要なのかどうかはわかりませんが、前のコードを使って動作します。サイト内のすべてのリンク(フロントエンドとバックエンド)を変更する必要がありますが、古いリンクをリダイレクトする必要があります。また、他のウェブサイトが古いページにリンクする場合もあります。

0

は、私がどのように行う最善の方法を意味し、これは次のとおりです。

RewriteRule ^([a-zA-z0-9-]+)/?([a-zA-Z0-9/-]+)?$ index.php?page=$1&par=$2 

とPHPで

:の場合のように

$page = $_GET["page"]; 
$parm = split("/",$_GET["par"]); 

// first par 
$parm[0]; 
関連する問題