1

シナリオ

Wordpress ベースのセットアップに移行した Web サイトをモデレートしていますが、Wordpress のすべての管理ツール (外部でホスト/管理されている) にはアクセスできませんが、htaccess ファイルにはアクセスできます。今、私がしなければならないことが2つあります。

  1. 古いページを新しい URL 構造にリダイレクトします。
  2. すべての www 呼び出しを非 www にリダイレクトします。

チャレンジ

ただし、次の方法でこれを実現したいと思います。

  1. 呼び出しごとの可能な限り少ないリダイレクト (できれば 1 つだけ)。
  2. ルールの重複が制限されています。
  3. ある程度読みやすいものにしてください (1 つのインライン正規表現だけですべてを処理するのではありません)。
  4. すべてhtaccessだけで編集しました。

私に苦労しているのは、古い URL であり、www のプレフィックスが付いている場合に、リダイレクトを最小限に抑えることです。

私の次の最大の問題は、書き換えマップを使用したいということですが、私が好む htaccess ファイルで辞書を定義するのではなく、外部から何かをロードする必要があるようです。

詳細

  • 私は書き換えエンジンの専門家ではないので、ここで簡単な解決策を見落としている可能性があります。
  • 古いウェブサイトは でシンプルに構成されていまし/index.php?page=<pageName>た。
  • 新しい Web サイトでは、seo フレンドリーな URL を使用しています/a-new-url-example/
  • 2 つの例を以下に示します。
    1. からmydomain.com/index.php?page=bootsまでmydomain.com/boots/
    2. からwww.mydomain.com/index.php?page=shoesまでmydomain.com/shiny-shoes/ (処理にはある種のマップが必要ですshoes-> shiny-shoes)
  • 自分のコンピューターでの現在のセットアップでは、ローカルでテストすることはできません (他のプロジェクトとの競合が多いため)。現在、http://htaccess.madewithlove.be/でセットアップをテストしています。
  • htaccess ファイルの現在の内容(コードが別のものとして解釈され続けたため、pastebin で)。
4

2 に答える 2

2

あなたが提供したように、これがhtaccess内の既存のルールと衝突しないことを願っています。

#exceptions first
RewriteCond %{QUERY_STRING} ^page=shoes3$ [NC]
RewriteRule ^index\.php$ /shiny-shoes/? [R=302]

#urls that directly map to the new url scheme
RewriteCond %{QUERY_STRING} ^page=(.*)$ [NC]
RewriteRule ^index\.php$ /%1/? [R=302]

#note the absence of the L flag in the above rules.
# from apache docs: the [R] flag prepends http://thishost[:thisport] to the URI, but then passes this on to the next rule in the ruleset

# no-www (make sure this is the last rule)
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^http://[^/]+/(.*)$ http://%1/$1 [R=302,L]
于 2012-11-28T16:44:01.327 に答える
0

次に例を示します。

条件:

.1 これらのルールを含む .htaccess ファイルはルート ディレクトリにあります。

.2 GET 値 (以下の例の「値」) は、要求された URL で変更されません。つまり、要求された URL の「shoes」は同じであり、質問の「shiny-shoes」ではありません。可能ですが、エイリアスのリストをパターンに含めるか、アイテムごとに異なるルールが必要になります。

.3 ルート ディレクトリの index.php スクリプトは、すべての可能な値を処理し、一致するものが見つからない場合は通常のページをロードできる必要があります。

    RewriteEngine on
    Options +FollowSymLinks

    #Redirect from http://www.mydomain.com to http://mydomain.com
    RewriteCond %{HTTP_HOST} ^www\.mydomain\.com$ [NC]
    RewriteRule ^(.*)$ http://mydomain.com/$1 [R=301,L]

    #mydomain.com/value/ to  mydomain.com/index.php?page=value
    RewriteRule ^(.*)?/$ index.php?page=$1 [L]

この例をテストするには、ルート ディレクトリの index.php に次のコードのみを含めます。

    <?php
    if ( $_GET[ 'page' ] == 'value' ) { // Change "value" accordingly 
      echo "Processing item <br /><br />";
    }
    else {
      echo "Loading normal page<br /><br />";
    }
    ?>
于 2012-11-28T06:03:52.783 に答える