RewriteRule возвращает HTTP 200, когда он должен быть HTTP 301 - PullRequest
0 голосов
/ 07 февраля 2012

Следующий RewriteRule перенаправляет трафик с URL shows.php?id=review-1 в файл контроллера на стороне сервера, который создает оптимизированный для SEO URL-адрес и далее перенаправляет с помощью перенаправления 301. Используя CURL, перенаправление в файл контроллера отображается как 200, прямая ссылка на файл контроллера показывает 301.

Вот мой RewriteRule:

RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\?
RewriteCond %{QUERY_STRING} (^|&)id=review-[0-9]+(&|$) [NC]
RewriteRule ^ /controllers/redirectseo.php? [R=301,L,NC,QSA]

Вот результат моих CURL звонков:

curl -I http://www.defunctgames.com/shows.php?id=review-1
HTTP/1.1 200 OK

curl -I http://www.defunctgames.com/controllers/redirectseo.php?id=review-1
HTTP/1.1 301 Moved Permanently

ОБНОВЛЕНИЕ 1:

Я пытался изменить свой RewriteRule, чтобы избавиться от [QSA], думая, возможно, в этом проблема. Он по-прежнему не возвращает 301. Следующее правило перезаписи возвращает 301, поэтому я знаю, что оно работает на каком-то уровне. Может ли FQL изменить ситуацию?

RewriteRule ^defunctexplorer.htm$ http://www.defunctgames.com/ [R=301,L]

ОБНОВЛЕНИЕ 2:

Я пробовал перенаправление FQL, и это тоже не имеет значения. Вот что у меня так далеко:

RewriteCond %{THE_REQUEST} ^GET\s/shows\.php
RewriteCond %{QUERY_STRING} (^|&)id=([a-z]+)-([0-9]+)(&|$) [NC]
RewriteRule ^ http://www.defunctgames.com/controllers/redirectseo.php?id=%2-%3 [R=301,L,NC]

1 Ответ

0 голосов
/ 07 февраля 2012

Есть ли в %{THE_REQUEST} строка запроса, добавленная, не закодированная? Может быть стоит попробовать это:

RewriteCond %{THE_REQUEST} ^GET\s/shows\.php
RewriteCond %{QUERY_STRING} (^|&)id=review-[0-9]+(&|$) [NC]
RewriteRule ^ /controllers/redirectseo.php? [R=301,L,NC,QSA]
...