2012-03-19 25 views
0

問題を書き換えています。 以下、私は何をしようとしているのか、そして私が得ている結果は何かを詳しく説明しています。今回は非常に明確になることを願っています。サンプルページはこちらwww.broadcast2world.com/samples.phpです。 ページに表示されているすべてのリンクとデータはデータベースから取得されています。ここで、特定の動画の「詳細情報」リンクをクリックして、ソーシャルコントロールを行うとします。その動画の特定のhrefは<a href="video.php?pid='.$id.'">としてトリガーされます。それは私が$ pageidに変数を使用して.htaccess経由で動的URLを静的URLに変換できません

if(!isset($_GET['pid'])){ 
    $pageid='66'; 
} 
else{ 
    $pageid=$_GET['pid']; 
} 

を使用して変数にそのIDをキャッチし、私は最終的にその特定のビデオのためのページを準備するクエリを実行形式のURLを介してhttp://www.broadcast2world.com/video.php?pid=66.

をそのIDを渡します。

私のSEOの男が必要とするものは、www.broadcast2world.com/video/name-of-the-videoの形式のURLです。

ここで問題があるのは、私がmod_rewriteの修正案をBen氏が説明してくれれば、私はその名前をそのIDにリンクする方法を知ることができないということです。私は上記のようにビデオのための特定のURLを作成しながら、私が修正しなければならないものがなければならないと確信しています。しかし、私は本当に何が分からないのですか?おかげで再びあなたの素晴らしいサポートのための

+0

これを解決する運がありますか? –

+0

こんにちはベン、多くのフォローアップありがとう。私はそれをまだ正しく構成することができませんでした。 URLを生成しているときに何か不足していると思います。これはまだクエリ形式です。私は前回私がしたので、寄稿者の多くが投票して馬鹿げていたので、私はそれについて尋ねることを恐れていました。私がしていることを正確に伝えることができれば大丈夫ですか? –

+0

こんにちはベン、私はあなたのポイントを得る。私はこの問題を再編集しています。今回は自分自身をもっとはっきりさせたいと思っています。アドバイスをいただきありがとうございます。 –

答えて

2

そのWebサイトによって生成された.htaccessコードにはいくつかの問題があります。

  • ピリオド(.は)のRewriteRuleディレクティブの左側にエスケープされなければならない - すなわち\.php
  • クエリ文字列は考慮されません(これが私が以下で説明する問題の第1の原因です)。
  • リダイレクトの種類が示されていません。一時的?永久?
  • RewriteBaseディレクティブはありません。デフォルトでは/が必須ではありませんが、読みやすくするために私はそれを使用する傾向があります。

リライトディレクティブは、特にREQUEST_URIコンポーネントのみを考慮しています。以下はmod_rewrite manual pageのものです。

REQUEST_URI要求されたURIのパスコンポーネント( "/index.html"など)。これは特に、QUERY_STRINGという名前の独自の変数として利用可能な のクエリ文字列を除外します。

以下のコードはコメントに説明されており、ここからのデバッグ情報は以下にあります。

# Enable rewrite engine http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteengine 
RewriteEngine On 

# Sets the base URL for per-directory rewrite http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase 
RewriteBase/

# Match the regular expression ^pname=...$ with the QUERY_STRING variable as the subject 
# Query string starts with pname (`^`). 
# Matches exactly pname=overviewvideos. 
# Must end with overviewvideos (`$`) 
RewriteCond %{QUERY_STRING} ^pname=overvidevideos$ 

# If the above condition is met, redirect to the 2nd parameter. 
# Note the escaped period (\.) 
# Note the status code 302 (Found, temporary) Can be 301 for permanent etc. 
# Note the L flag - this prevents further rules being processed if the conditions are met. (L for Last) 
# Note that at this stage we are back to matching the REQUEST_URI, so just allvideos.php in our regular expression. Must start and end with the string allvideos.php 
RewriteRule ^allvideos\.php$ allvideos.php?pname=Overview%20Videos [R=302,L] 

入力URL:http://www.yoursite.com/allvideos.php?pname=overvidevideos

RewriteCond %{QUERY_STRING} ^pname=overvidevideos$ This condition was met 
RewriteRule ^allvideos\.php$ allvideos.php?pname=Overview%20Videos [R=302,L]  
    This rule was met, the new url is http://www.yoursite.com/allvideos.php?pname=Overview%20Videos 
    Test are stopped, because of the R in your RewriteRule options. A redirect will be made with status code 302 

出力URL:http://www.yoursite.com/allvideos.php?pname=Overview%20Videos

ルールを繰り返すために、あなたがするRewriteCondとのRewriteRule始まる行を複製することができます。

1

次の行を置き換え

RewriteRule ^allvideos.php/pname=overviewvideos$ allvideos.php?pname=Overview%20Videos 
以下のコードで

RewriteRule ^allvideos.php?pname=overviewvideos$ allvideos.php?pname=Overview%20Videos 

?

/の交換は同様に同じ変更を加えます第2書き換え規則

+0

@Ben Swinburne:ありがとう。 –