0

古いウェブサイトに新しい CMS を提供しました。今、私は 3 つの部分を持つ .htaccess が必要ですが、そのうちの 2 つだけで動作します:

  1. 永続的にリダイレクト
  2. www リダイレクト (これは機能しません)
  3. URL書き換え

今、私は何かを説明します。パート0(全体のみ)

RewriteEngine On

パート 1 (永続的なリダイレクト) 古い CMS の URL を新しい CMS のコンテンツにリダイレクトするために使用します。

RewriteCond %{THE_REQUEST} !/de-old-content.html
Redirect permanent /de-old-content.html /old/content.html

パート 2 (www リダイレクト) コンテンツの重複を避けるために使用します。

RewriteCond %{HTTP_HOST} ^website.de [NC]
RewriteRule ^(.*)$ http://www.website.de/$1 [L,R=301]

「old/content.html」を「index.php?addresse=old/content」に変換するパート3(URL書き換え)

RewriteRule ^(.*)\.html$ index.php?adresse=$1 [l,qsa]

[l,qsa] は $_GET の使用のみを許可します。

このパーツを組み合わせることは可能ですか?

パート2を使用すると、適切なコンテンツが表示されます

http://www.website.de/abc/def/ghi.html

しかし、wwwがなければリダイレクトします

http://www.website.deabc/

この部分には間違いがあるに違いないと思います。

前もって感謝します。

4

1 に答える 1

1

リダイレクトは mod_alias の一部であり、RewriteCond と RewriteRule は mod_rewrite の一部です。その結果、パート 1 の RewriteCond がパート 2 の RewriteRule に実際に適用され、正しく機能しなくなります。

rewriterule と redirect の両方を一緒に使用することは避けるのが最善です。

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^website.de [NC]
RewriteRule ^(.*)$ http://www.website.de/$1 [L,R=301]

RewriteRule ^de-old-content\.html$ /old/content.html [L,R=301]

RewriteRule ^(.*)\.html$ index.php?adresse=$1 [L,QSA]

PS。正気を保つために、テスト中は 302 を使用してください。すべてが機能したら、それらを 301 に変更します。既に 301 を使用しているため、ブラウザのキャッシュもクリアして、古い 301 をすべてブラウザのキャッシュから削除します。

于 2013-03-11T19:28:37.920 に答える