0

1) www 以外のすべてのものを www に (ファイルを含めて) 301 しようとしています。

/subdirectory/ + /subdirectory/1.jpg(www を含むすべての可能性)


2) .html ファイルと .php ファイルのみを表示から除外しようとしており、末尾のないバージョンのみをインデックスに登録し、残りは自分のドメインへの 301 にすることを希望しています。

/example.html または .php >> /example

/example.html または .php >> 動作しない + インデックスされない

例: /example のみ動作し、インデックスのみが作成されます (コンテンツの重複を避けるため)。


3) 私は自分のドメインへのすべての無効なリンクと 404 を 301 しようとしています。

/deadlink または /deadlink.pdf >> 私のドメイン example.com に 301'd


これが私が現在持っているコードですが、100%適切かどうかはわかりません。これら 3 つのタスクの検証済みの構文を返信してもらえますか? ありがとう。


Options +FollowSymLinks 

RewriteEngine On 

RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 

RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

RewriteEngine on  

RewriteCond %{REQUEST_FILENAME} !-d 

RewriteCond %{REQUEST_FILENAME}\.php -f 

RewriteRule ^(.*)$ $1.php

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-d 

RewriteCond %{REQUEST_FILENAME}\.html -f 

RewriteRule ^(.*)$ $1.html

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule . / [L,R=301]
4

1 に答える 1

4

OK、ここで試しているのは 3 つの部分です。それらすべてを個別に扱います。

開始する前に、必要なものは 1 つだけです

RewriteEngine on

オンにする必要があるのは 1 回だけです。

以下も設定する必要があります。

Options -MultiViews

そうしないと、MultiViews がここで奇妙な問題を引き起こす可能性があるためです。

WWW にリダイレクト

現在のルールは機能するはずですが、!=接頭辞 onを使用して少し単純化できRewriteCondます。

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

削除.php.htmlサフィックス

ここでは、2 つの別個のルール セットが必要です。1 つは URL からサフィックスを削除するためのもので、もう 1 つはサフィックスを内部的に再読み込みするためのものです。

その方が簡単なので、最初に後半を行いましょう。

RewriteCond %{SCRIPT_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [L]

RewriteCond %{SCRIPT_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L]

ただし、これを行うと、サフィックスを削除して元に戻そうとするルールと競合することなく、サフィックスを削除するのが少し難しくなります。私が思いついた最良のアプローチは次のとおりです。

RewriteCond %{THE_REQUEST} \.(html|php)
RewriteRule ^(.*)\.(html|php)$ $1 [R=301,L,NC]

しかし、私は提案を受け入れています。

すべてのデッドリンクに 301ing

そうしないでください。リンクが存在しない場合は、404 ステータスのページが返されます。デッドリンクから訪問者をホームページにリダイレクトしたい場合は、404 ページにリンクを挿入します。

于 2013-04-01T00:10:26.193 に答える