1

私は次のようなURLを持っています:

siteurl.com/category.php?id=6&name=internet

301リダイレクトを作成したい

siteurl.com/category/6/internet/

私は成功せずに試しました:

RewriteRule ^category.php?id=([^&]*)&name=([^&]*) /category/$1/$2/ [R=301,L]

それについてのより多くの情報:グーグルの複製された内容。htaccessまたはrobots.txt?

何か助けはありますか?


エクストラエディット; siteurl.com/category.php?id=6このページには、(名前クエリを使用して)からアクセスすることもできます。それに対処するための最良の方法は何ですか?この種のURLをホームページにリダイレクトしますか?もしそうなら、どうすればそれを行うことができますか?

4

1 に答える 1

1

クエリ文字列はRewriteRule式に表示されません。代わりに、 で一致させる必要がありRewriteCondます%{QUERY_STRING}

RewriteEngine On
# Capture the id and name into %1 and %2 from the query string
RewriteCond %{QUERY_STRING} ^id=(\d+)&name=([a-zA-Z-]+)
# If the query string does not include noredirect=
# This protects against a rewrite loop when attempting to 301 redirect the ugly URL
RewriteCond %{QUERY_STRING} !noredirect=
# Rewrite category.php to /category/id/name
RewriteRule ^category\.php /category/%1/%2/? [L,R=301]

これ? は、URL の末尾でクエリを繰り返さないようにするために必要です。

# I assume you also have the following rule, which configures the pretty URL in the first place
# Then in the rule which points the pretty URL to the real internal one, add
# the fake query string param noredirect=1, which won't actually be used by PHP. It just 
# matches in the rules above to prevent rewriting when present
RewriteRule ^category/(\d+)/([^/]+) category.php?id=$1&name=$2&noredirect=1 [L]
于 2012-10-11T00:31:18.240 に答える