0

サイトで 301 リダイレクトを作成するときに問題に直面しています。リダイレクトを作成しているとき、ブラウザーはページを誘導するのではなく、完全な qherysting を表示しています。

例えば。/contact を /contact-us に転送したい

私が得ているものは次のとおりです。

/contact-us?page=連絡先

これが私の.htaccessのコードです:

RewriteEngine on

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

RewriteBase /

redirect 301 /contact /contact-us 
RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [L]

なぜこれが起こっているのですか?

4

3 に答える 3

4

これはmod_alias/mod_rewriteの競合です。パス処理パイプラインは、2つのことを別々に処理しています。mod_rewriteに固執して置き換えることができます

redirect 301 /contact /contact-us 

RewriteRule ^contact$ /contact-us [L,R=301]

したがって、ここに到達すると書き換えは停止し、最後のルールが適用されることはありません。それ以外の場合、mod_aliasはURLをリダイレクトしますが、mod_rewriteを介してURIが実行されるまではリダイレクトされないため、このglobbed一緒にリダイレクトされます。末尾を気にしないのなら、リダイレクトターゲットの最後に追加することもできます。

redirect 301 /contact /contact-us?

クエリ文字列が追加されないようにします。

于 2012-08-17T10:35:50.297 に答える
0
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^yoursite\.com [NC]
RewriteRule (.*) http://www.%{HTTP_HOST}%{REQUEST_URI}


RewriteRule ^contact[/]?$ /contact-us [R=301]
RewriteRule ^([^/\.]+)[/]?$ /index.php?page=$1 [L]
于 2012-08-17T10:42:28.697 に答える
0

このようにしてください:

リダイレクト 301 /contact http://www.domain.com/contact-us

完全な URL を使用します。

于 2012-08-17T10:42:38.573 に答える