Перенаправлять только определенные запросы в файл контроллера с помощью RewriteRule - PullRequest
0 голосов
/ 07 февраля 2012

Я создал файл контроллера, который обрабатывает перенаправление пользователей на правильный URL, я хочу направить определенный трафик на этот контроллер и не влиять на остальные.http://website.com/shows.php?id=review-1 является примером URL-адреса, который я хочу отправить контроллеру.

На данный момент я придумал следующее RewriteRule, которое вызывает общесайтовый сервер 500 Ошибка сервера.

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

Удаление -[0-9]+ из условия %{QUERY_STRING} избавляет от 500-серверной ошибки всего сайта, но не работает.Следующее RewriteRule, которое я пытаюсь заменить, прекрасно работает.

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9]+)/([0-9]+)/([a-z0-9-]+)?/?$ /shows.php?id=$1-$2 [QSA,L,NC]

Конечным результатом является то, что пользователь, который переходит на http://www.website.com/shows.php?id=review-1, в конечном итоге получит http://www.website.com/controller.php?id=review-1, который будет заниматься обработкойперенаправление 301.

Ответы [ 3 ]

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

Я думаю, вам нужно выяснить, что является причиной ошибки 500. Я подозреваю, что перенаправление работает, но страница, на которую вы перенаправлены, не работает.

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

Я до сих пор не знаю, почему вы пытаетесь превратить простые вещи в сложные;)

6 минут, чтобы найти + тест. Вот что должно работать:

RewriteCond %{QUERY_STRING} (^|(.)+&)(id=review-([0-9]+))($|&.*) [NC]
RewriteRule /shows.php /controller.php?%3 [QSA,L]

PS: Как и Девин, я не понимаю / почему (?:^|&) работает ...

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

Интересно.Не выглядит неправильно, но я не мог заставить строку

RewriteCond %{QUERY_STRING} (?:^|&)id=review-[0-9]+(?:&|$) [NC]

скомпилировать в mod_rewrite, пока я не вынул индикаторы без захвата

RewriteCond %{QUERY_STRING} (^|&)id=review-[0-9]+(&|$) [NC]

, кажется, компилируется нормальнов моей системе это работает для вас?

...