2

仕様:

  1. 言語 : PHP
  2. DB : MYSQL
  3. ウェブサイトの種類 : ダイナミック
  4. .htaccess の使用率 : 高
  5. 有効な Apache モジュール: mod_rewrite および mod_spelling

コードを書き換える:

RewriteRule ^(.+)-(.+)~(.+)\.html$ gallery-model.php?gallnm=$1&newnm=$2&modelid=$3

解決しなければならない問題が 2 つあります。

1. URL の重複の問題 2. URL に追加されるクエリ文字列

問題 #1: URL の重複の問題

SEO-MOZ レポートによると、同じコンテンツを持つ 2 つの異なる URL があります。例えば、

URL の構造 : http://www.example.co.uk/galleryname-modelname~modelid.html

URL 1 : http://www.example.co.uk/Shoes-Blackmamba~23.html

URL 2 : http://www.example.co.uk/shoes-blackmamba~23.html

URL 1 はキャメル ケースのテキストで、URL 2 は小文字のテキストであることに注意してください。

gallery-model.php ファイルは、上記の URL #1 および #2 に表示されるように、MYSQL データベースに格納された数百のレコードを作成します。

ノート) :

  1. クエリ文字列を解析するのに妥当な変数はすべて「strtolower」を使用しています。ダブルチェックして確認しました。
  2. 上記のREWRITE CODEを確認すると、最後に [nc] が表示されます。操作しようとすると、500 内部サーバー エラーが返されます。

同じ内容で異なる URL の URL の重複を防ぐ方法は?

問題 #2: URL に追加されるクエリ文字列

URL を SEF に書き換える機能を実行するREWRITE CODEを確認してください。一部の URL は正常に機能しますが、残りはクエリ文字列を追加します。たとえば、

http://www.example.co.uk/shoes-blackmamba~23.html?gallnm=シューズ&newnm=ブラックマンバ&modelid=23

ノート) :

  1. 上記の URL を確認すると、クエリ文字列にキャメルケースが含まれていることがわかります。

  2. REWRITE CODEが適用されているため、「URL?」の後に変数名と現在の値を追加しないでください。しかし、そうです。

  3. trim() が使用され、mysql ケースの変更は適用されません。

このクエリ文字列を削除するには?

問題#1と#2の解決策を試しました:

  1. mod_spelling.c を有効にしましたが、500 内部サーバー エラーで返されました。
  2. いくつかの Google 検索がうまくいかない場合、URL を強制的に小文字にします。

お返事をお待ちしております。

4

1 に答える 1

1

手順: 1. 現在の URL を取得します。2.「?」の Preg_match 3.「?」で爆発 4. 展開された配列 [0] にリダイレクトします。

以下のようにコードします。

//Force all lower case - begins

//Step 1 : To get current URL
function curPageURL() {
 $pageURL = 'http';
 if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
 $pageURL .= "://";
 if ($_SERVER["SERVER_PORT"] != "80") {
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
 } else {
  $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
 }
 return $pageURL;
}

//Step : 2
if (preg_match('/?/',$camel)) {
        $expurl = (explode("?",$camel)); //Step 3 : Explode with "?"
        header("Location: $expurl[0]"); //Step 4 : Redirect to exploded array[0].
    }
于 2013-03-25T11:57:19.853 に答える