Перенаправить существующий файл на другой URL, используя mod_rewrite - PullRequest
0 голосов
/ 06 февраля 2012

Я пытаюсь использовать mod_rewrite, чтобы перенаправить существующий файл на другой URL. Я использую следующее, и это не имеет никакого эффекта. Я пробовал несколько вариантов, которые не работают.

RewriteEngine on
AddHandler x-httpd-php .php3
# AddHandler x-httpd-php5 .php .php4

# This file exists, but this redirect doesn't work
RewriteRule ^show.php?id=review-1$ /review/1/super-baseball-2020/ [R=301,L]

Случайно ли это как-то связано с параметрами URL?

1 Ответ

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

Вы не можете иметь строку запроса в RewriteRule. RewriteRule соответствует только части URL, поэтому ваше новое правило не работает. Вам нужно иметь отдельный RewriteCond для соответствия строке QUERY. Это должно быть переписано так:

# for external redirect from /shows.php?id=review-1 to /review/1/super-baseball-2020/
RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\?
RewriteCond %{QUERY_STRING} (?:^|&)id=([^-]*)-(.*)(?:&|$) [NC]
RewriteRule ^ /%1/%2/super-baseball-2020/? [R=301,L,NC]

# for internal redirect from /review/1/super-baseball-2020/ to /shows.php?id=review-1
RewriteRule ^([a-z0-9]+)/([0-9]+)/([a-z0-9-]+)?/?$ shows.php?id=$1-$2 [L,NC,QSA]
...