2012-02-06 64 views
4

次のようなURLに行く場合:http://stackoverflow.com/questions/9155602/アドレスバーはhttp://stackoverflow.com/questions/9155602/redirect-existing-file-to-different-url-using-mod-rewriteに更新されます。これはJavaScriptではなく、ハードリフレッシュではなく、mod_rewriteを使っているということです。しかし、それはどのようにPHPでサーバー側の処理なしで記事のタイトルを知っているだろうか?SEOフレンドリーなURLのようにstackoverflowを書き換える方法

私はちょうど/shows.php?id=review-1であった、以前は/review/1/super-baseball-2020であるSEOフレンドリーなURLを使用するように自分のサイトを更新しました。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-z0-9]+)/([0-9]+)/([a-z0-9-]+)?/?$ /shows.php?id=$1-$2 [L,NC] 

必ずGoogleが重複したコンテンツのために私にヒットしない、ブックマークが正しく転送されますことを行うの私の現在のパスは次のとおりです。それは私の書き換えに来るとき終わりにテキストが実際に本当に問題ではありません次

RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\? 
RewriteCond %{QUERY_STRING} (?:^|&)id=review-1(?:&|$) [NC] 
RewriteRule^/review/1/super-baseball-2020/? [R=301,L,NC] 
RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\? 
RewriteCond %{QUERY_STRING} (?:^|&)id=review-2(?:&|$) [NC] 
RewriteRule^/review/2/aero-fighters-2/? [R=301,L,NC] 
RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\? 
RewriteCond %{QUERY_STRING} (?:^|&)id=review-3(?:&|$) [NC] 
RewriteRule^/review/3/aero-fighters-3/? [R=301,L,NC] 
.... and so on .... 

ソリューションは非常に近視眼的で、私の.htaccessに入れるために数千行であること。

+0

私はこの機能が 'mod_rewrite'を使ってSO上で行われるのではないかと疑います。何が起こるかは、stackoverflow.com/*anything*へのリクエストが同じサーバー側のコードで処理され、そのURLを解析し、質問IDを使用してそのページのコンテンツを提供するリクエストを*ルーティング*します。質問タイトルはサーバによって無視されます。http://stackoverflow.com/questions/9168364/bouncing-fluffy-muffins – millimoose

+1

にアクセスしてください。通常、mvcアプリケーションはすべての要求を同じスクリプト(フロントコントローラ)にルーティングします。自分自身を要求し、アクションを適切なコントローラークラスに委譲します。 – dqhendricks

答えて

3

サーバーサイドなしで記事のタイトルを知っているとはどういうふうでしょうか PHPで処理していますか?

mod_rewriteしかできません。さらに、それをあまりにも更新する必要があります。これらの要求をスクリプトで処理するのが最善です。あなたのindex.phpに続いて

<IfModule mod_rewrite.c> 
RewriteEngine On 
#RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /index.php [QSA,L] 
</IfModule> 

/review/1/を解析1のidと見直しのタイトルのためにデータベースに見て、それを渡すためにREQUEST_URIを分割:あなたは何をやったかと似.htaccessを作成フレンドリーなURI(スラッグ)関数に追加し、URLに追加してリダイレクトします。

2

私はまた、私たちのショーのためのSEOフレンドリーなURLソリューションを作成しました。 URLは当然/raido/episode.php?SeriesId=1 & EpisodeId = 123ですが、私の.htaccessは次のようになりますので、私はあまりにも、/radio/1-123-live.htmたかった:

のRewriteRule^\ dは{1,3} - \ dの{1,4}(+)のhtml $ episode.phpスラッグ= $ 0

私は、先のページはこれもことができます

if ($Slug !== "") { 
    $lIds = explode("-", $Slug); 
    $SeriesId=$lId[0]; 
    $EpisodeId=$lIds[1]; 
} 

それを処理しましょう。?同じコードの2つのバージョンを持たなくても既存のリンクを引き続き受け入れることができます。

0

アプリケーション自体で、URLを要求された場所の絶対URLと照合するか、新しい「ページ」が追加されるたびにgenerating the mappingでチェックする必要があります。

3

重複するコンテンツの場合、先頭に正式なリンクタグが必要です。カノニカルリンクタグは現在のページにカノニカルリンクと同じコンテンツの代替URLがあり、このコンテンツのメインURLがカノニカルリンクであることをgoogleに伝えます。同じページに異なるURLが付いている可能性がある、ページ区切りのコンテンツ、検索などの場合はこれが最適です。

<link rel="canonical" href="http://www.somedomain.com/mainurl" /> 
2

私は

curl -I http://stackoverflow.com/questions/9155602/ 

を行う場合、私は実際にハードリダイレクト取得:多くの場合、これらのセットアップは、フロントコントローラを通過するすべての要求を強制的に、短い.htaccessファイルが含まれている

HTTP/1.1 301 Moved Permanently 
Cache-Control: public, max-age=60 
Content-Length: 0 
Content-Type: text/html 
Expires: Mon, 06 Feb 2012 22:43:27 GMT 
Last-Modified: Mon, 06 Feb 2012 22:42:27 GMT 
Location: /questions/9155602/redirect-existing-file-to-different-url-using-mod-rewrite 
Vary: * 
Date: Mon, 06 Feb 2012 22:42:27 GMT 

を、またはメインのindex.phpファイル。このファイルは$ _SERVER ['PATH_INFO']変数をチェックし、どのコンテンツをプル・アンド・レンダリングするかを決定します。

これは簡単な.htaccessファイルの例(実際にはインストールバニラワードプレスからコピーされた)である。この例では

RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

は、ハードリダイレクトして、彼らはindex.phpの中で「他」を持つことができPATH_INFOの最後の部分に基づいてコンテンツが見つからない場合は、ルックアップを行い、正しくリダイレ​​クトされます。

+0

私が知っているURL上でカールしようとすると、301が使用されています。それは200だけです。http://www.defunctgames.com/shows.php?id=review-1コード: 'RewriteCond%{THE_REQUEST}^GET \ s/shows \ .php \? RewriteCond%{QUERY_STRING}(^ |&)id = review- [0-9] +(&| $)[NC] RewriteRule^/controllers/redirectseo.php? [R = 301、L、NC、QSA] –

関連する問題