htaccess mod_rewrite с динамическими параметрами - PullRequest
0 голосов
/ 29 июня 2009

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

Скажите, что я хочу переслать этот URL: /cansas.php?m=2&id=2-0-0-0&sid=cansas to / cansas-is-good-for-you и пусть заголовок отвечает 301, или просто обновите URL через [R].

У меня есть это в моем .htaccess:

Опции + FollowSymlinks

ПереписатьEngine на

RewriteRule ^ cansas.php? M = 2 & id = 2-0-0-0 & sid = cansas $ cansas-is-good-you-you [NC, R = 301]

Я подумал, что мог бы просто сделать простую пересылку, но где-то по пути она перестает работать. Если я вырежу? M = 2 & id = и т. Д., Он перенаправит только часть кансы в новую часть, и она будет выглядеть следующим образом: cansas-is-good-for-you? M = 2 & id = 2-0-0-0 & sid = cansas.

Как я могу переслать это, когда у меня есть несколько динамических параметров в строке URL? Пример на страницах, которые мне нужно переслать:

/ cansas.php? Т = 2 & ID = 2-0-0-0 & SID = cansas

/ cansas.php? Т = 2 & ID = 2-1-0-0 & SID = cansas

/ cansas.php? Т = 2 & ID = 2-2-0-0 & SID = cansas * * тысячу двадцать-одна

Любая помощь будет принята с благодарностью :)

Может быть, это невозможно сделать таким образом? В настоящий момент я настроил его так, что я хочу использовать новые URL-адреса, называемые / cansas-is-good-for-you, которые читают из источника /cansas.php?m=2&id=2-0-0-0&sid = cansas, но URL, отображаемый в браузере, должен быть: / cansas-is-good-for-you. Мне нужно переслать этот старый cansas.php? URL на новый URL:)

1 Ответ

1 голос
/ 29 июня 2009

Вам необходимо проверить запрос URL с помощью директивы RewriteCond, поскольку директива RewriteRule обрабатывает только путь URL:

RewriteCond %{QUERY_STRING} ^m=2&id=2-0-0-0&sid=cansas$
RewriteRule ^cansas\.php$ /cansas-is-good-for-you? [L,R=301]

Если вы хотите проверить только один параметр, используйте это:

RewriteCond %{QUERY_STRING} ^([^&]*&)*sid=cansas(&.*)?$
RewriteRule ^cansas\.php$ /cansas-is-good-for-you? [L,R=301]

И чтобы сделать это только для первоначальных запросов, вам нужно проверить строку запроса :

RewriteCond %{THE_REQUEST} ^GET\ /cansas\.php
RewriteCond %{QUERY_STRING} ^([^&]*&)*sid=cansas(&.*)?$
RewriteRule ^cansas\.php$ /cansas-is-good-for-you? [L,R=301]
...