.htaccessを使用して次のリダイレクト(301)を作成しようとしています
*?page = 1は*にリダイレクトします
(*はワイルドカードです)。
基本的に、URLの最後に?page = 1が付いているページにアクセスする人を禁止し、代わりに同じURLから?page=1
。
これを行う簡単な方法はありますか?
これはそれを行う必要があります:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^page=1$
RewriteRule (.*) $1? [R=permanent]
1行ずつ:
page=1
でなければならないことを条件( "ifステートメント")として指定します。リダイレクトを一時的(302)にする場合は、=permanent
部分を削除するだけです。 R
フラグのデフォルトは、Moved Temporarilyです。
QSDフラグ(クエリ文字列破棄)を使用して、クエリ文字列を渡さずにどこかにリダイレクトすることもできます。
Apache 2.4を使用している場合、QSD(クエリ文字列破棄フラグ)を使用して、リンク先URLから特定のクエリ文字列を破棄できます。
Apache 2.4ユーザーの例を次に示します。
古いURL:-/ foo/bar /?page = 1
新しいURL:-/ foo/bar /
Htaccessコード:
RewriteEngine on
RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC]
RewriteRule ^ %{REQUEST_URI} [L,R,QSD]
上記のルールは、クエリ文字列を削除するために?page = 1でURIをリダイレクトします。この例は、QSDをサポートしていないため、Apacheバージョン2.4以下で500エラーを返します。
Apacheの下位バージョンでは、宛先URLの末尾に空の疑問符?を使用して、クエリ文字列を削除できます。
例 :
RewriteEngine on
RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC]
RewriteRule ^ %{REQUEST_URI}? [L,R]
上記の例は、Apacheのほとんどすべてのバージョンで機能します。
(お役に立てれば!)
クエリ文字列全体を削除するには、これで十分です。
RewriteRule ^(.*) http://domain.com/$1? [R=301,L]