2017-04-22 206 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]