2017-04-22 10 views
0

私は自分のウェブサイトに簡単な301リダイレクトを実装しようとしていますが、エラーメッセージや内部サーバーエラーはなく、うまく動作しません。私は以前のフォーラムの投稿でいくつかの異なる提案を試みましたが、何も動作していません。以下は私のhtaccessファイルの完全なコードです:301 htaccessを使用してリダイレクト

ErrorDocument 404 http://website.com/ 

RewriteEngine on 

Redirect 301 /recipe?recipe=1 http://website.com/recipe/recipe-a 
Redirect 301 /recipe?recipe=2 http://website.com/recipe/recipe-b 
Redirect 301 /recipe?recipe=3 http://website.com/recipe/recipe-c 
Redirect 301 /recipe?recipe=4 http://website.com/recipe/recipe-d 
Redirect 301 /recipe?recipe=5 http://website.com/recipe/recipe-e 
Redirect 301 /recipe?recipe=6 http://website.com/recipe/recipe-f 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^recipe/([\w-]+)/?$ recipe.php?recipe=$1 [QSA,L] 

#Remove .php extension: 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

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

ありがとうございました。

答えて

0

RewriteRuleを使用してクエリ文字列を一致させることはできません。 RewriteCondを次のように使用してください。

Options -MultiViews 
ErrorDocument 404/
RewriteEngine on 

#Force non-www: 
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L,NE] 

RewriteCond %{QUERY_STRING} ^recipe=1$ [NC] 
RewriteRule ^recipe(\.php)?$ /recipe/receipe-a? [L,NC,R=301] 

RewriteCond %{QUERY_STRING} ^recipe=2$ [NC] 
RewriteRule ^recipe(\.php)?$ /recipe/receipe-b? [L,NC,R=301] 

RewriteCond %{QUERY_STRING} ^recipe=3$ [NC] 
RewriteRule ^recipe(\.php)?$ /recipe/receipe-c? [L,NC,R=301] 

RewriteCond %{QUERY_STRING} ^recipe=4$ [NC] 
RewriteRule ^recipe(\.php)?$ /recipe/receipe-d? [L,NC,R=301] 

RewriteCond %{QUERY_STRING} ^recipe=5$ [NC] 
RewriteRule ^recipe(\.php)?$ /recipe/receipe-e? [L,NC,R=301] 

RewriteCond %{QUERY_STRING} ^recipe=6$ [NC] 
RewriteRule ^recipe(\.php)?$ /recipe/receipe-f? [L,NC,R=301] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^recipe/([\w-]+)/?$ recipe.php?recipe=$1 [QSA,L] 

#Remove .php extension: 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.+?)/?$ $1.php [L] 
関連する問題