2012-01-20 17 views
2

Hy、mod_rewriteで正規のURLを作成するにはどうすればよいですか(Facebookの場合は "Parsing")。Mod-Rewrite "Canonical URL"

例: 私が持っている: example.com/index.php?page= eventdetails & ID =

を私は次のようになりますcanonincal URL、になるだろう:

example.com/ eventdetails/241/スクリプトから無視されるだろういくつかのテキスト

私は、この例でそれをテストしたが、それは動作しません:

RewriteEngine on 
RewriteRule ^/eventdetails/([0-9]+)/$ index.php?show=eventdetails&id=$1 

.htaccessファイルは、「ホーム」方向にあります。

私は正確なこの例の@googleの解決策を見つけることはありません。誰かが私を助けてくれることを願っています!

答えて

7

はこれを試してみてください:

RewriteEngine on 
RewriteBase/
RewriteRule ^eventdetails/([0-9]+)/?$ index.php?show=eventdetails&id=$1 [L,NC] 
RewriteRule ^eventdetails/([0-9]+)/([a-z0-9\-_]+)/?$ php.php?show=eventdetails&id=$1&name=$2 [L,NC] 

/?は終わりoptinal /を意味します。したがって、このルールにはexample.com/eventdetails/241/example.com/eventdetails/241が有効です。最初のルールは、イベント名が使用されていない場合にのみ最初のルールを使用します。

このURLでは、2番目のURL(イベント名が使用されている場合):example.com/eventdetails/241/event-name/が使用されます。ここでは、私は+を推奨していません。なぜなら、それはSEOに優しいものではないからです。代わりに-をお勧めします。

他のルールがあり、ノンケースのNCフラグがある場合は、Lを追加しました。

L: [L]フラグは、mod_rewriteによってルールセットの処理を停止させます。ほとんどのコンテキストでは、ルールが一致する場合、それ以上のルールは処理されません。これは、Perlの最後のコマンド、またはCのbreakコマンドに対応します。このフラグを使用して、現在のルールをそれ以降のルールを考慮せずにただちに適用する必要があることを示します。

NC:[NC]フラグを使用すると、RewriteRuleは大文字小文字を区別しないで一致させます。つまり、一致したURIに文字が大文字か小文字のどちらで表示されるかは気にしません。

から:http://httpd.apache.org/docs/2.3/rewrite/flags.html

+0

ありがとうございます!それは "ほぼ動作する"、私は、 "イベントタイトル"を含むURLの最後にいくつかの "ランダムなテキスト"を追加する必要があります/このようにすることができます: example.com/eventdetails/43/Brennan+Heart + MCM + Feldbach もう一度お返事いただき、ありがとうございました。 –

+0

問題なし、私は私の答えを更新しました –

+0

ありがとう!私は言うことを忘れてしまった、タイトルはスクリプトによって無視することができます、私はIDからの内容を読んでいます。しかし、私はダミーです:-X 私はこのように解決しました: RewriteRule^eventdetails /([0-9] +)/?$ index.php?これを行うには、これが「最良の」方法であることを願っています。 ありがとうございました! Chris –