2017-02-13 8 views
2

Я два типа URL-адресов:.htaccess; Слишком много переадресаций, если два различных переадресовывает в .htaccess

http://www.example.com/?content=contact_form.php 

и

http://www.example.com/?content=product.php&id=20 

Я изменил всю мою систему URL, как это:

http://www.example.com/file/contact_form 

и

http://www.example.com/product/I-m-the-title/20 

Конечно, я сделал 301 переадресацию с .htaccess, чтобы сообщить Google и co. новый URL.

Я сделал это так:

# Rewrite URLs 

RewriteEngine On 
RewriteRule ^(ignore)($|/) - [L] 
RewriteRule ^file/([^/]*)$ /?content=$1.php [L] 
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /?content=$1.php&title=$2&id=$3 [L] 


# Redirect old URL to new URL 

RewriteCond %{QUERY_STRING} ^content=contact\_form\.php$ 
RewriteCond %{REQUEST_URI} ^\/$ 
RewriteRule .* http://www.example.com/file/contact_form? [R=301,L] 

RewriteCond %{QUERY_STRING} ^content=product\.php&class=I-m-the-title$ 
RewriteCond %{REQUEST_URI} ^\/$ 
RewriteRule .* http://www.example.com/I-m-the-title/Test/20? [R=301,L] 

Моей проблема:

Это прекрасно работает: http://www.example.com/?content=product.php&id=20

Но для http://www.example.com/?content=contact_form.php я получаю сообщение, что он не может получить открытое из-за слишком большого перенаправления.

Кто-нибудь знает, что я делаю неправильно? Я надеюсь, что кто-то может мне скоро помочь, потому что я должен это исправить, прежде чем Google неправильно истолковал это.

ответ

1

Ваше правило вызывает бесконечный цикл, поскольку он переписывая URI в том же месте снова и снова перекрывая свои внутренние и внешние переадресовывает .. Для того, чтобы закрепить петлю Rewrite, добавьте следующую строку в верхней части HTAccess

RewriteEngine on 

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule^- [L] 
+0

Ты замечательный. Спасибо, большое спасибо! – David