PHP мод переписать - PullRequest
       10

PHP мод переписать

0 голосов
/ 21 марта 2009

У меня есть правило, которое:

RewriteRule ^cat_ap~([^~]+)~(.*)\.htm$ /urban/cat_ap.php?$1=$2 [L]

идет в cat_ap.php? Nid = xxxxxxx

Теперь я должен добавить другую поддержку.

cat_ap~pnid~290~nid~96666~posters~Sports.htm

нужно разрешить в cat_ap.php? Pnid = 290 & nid = 96666 (меня не интересует конец ссылки, хотя он мне нужен для устаревшего платного поискового трафика).

Кроме того, мне нужно получить page_num из ссылки для расчета нумерации страниц.

cat_ap~PageNum_GetProduct~10~nid~290.htm needs to resolve to cat_ap.php?PageNum_GetProduct=10&nid=290

Мне нужно объединить все эти сценарии в одно или несколько правил.

Есть идеи? Я сейчас читаю об этом, но застрял.

Спасибо

Ответы [ 3 ]

1 голос
/ 21 марта 2009

В этом сценарии я бы предложил использовать правило RewriteRule ^ cat_ap (~. *). Htm $ /urban/cat_ap.php?$1 [L] , чтобы поймать все возможные сочетание и разложить строку внутри вашего приложения PHP.

Таким образом, будет проще отлаживать параметры, поскольку apache иногда может быть довольно ублюдочным.

1 голос
/ 21 марта 2009

Вот решение, которое будет перебирать пары ключ / значение в вашем URL:

RewriteRule ^cat_ap~([^~]+)~([^~]+)(.*)\.htm$ cat_ap$1?$1=$2 [N,QSA]
RewriteRule ^cat_ap(.*)\.htm$ /urban/cat_ap.php [L]

Он захватывает первую пару с URL, затем переписывает ее на точно такой же URL без этой пары, добавляет пару в строку запроса ([QSA]) и снова начинает процесс перезаписи [N]). Если в URL больше нет пар ключ / значение, он переписывает его в местоположение вашего скрипта и прекращает перезапись ([L]).

cat_ap~pnid~290~nid~96666~posters~Sports.htm => /urban/cat_ap.php?posters=Sports&nid=96666&pnid=290
cat_ap~PageNum_GetProduct~10~nid~290.htm => /urban/cat_ap.php?nid=290&PageNum_GetProduct=10

(Обратите внимание, что порядок параметров обратный; это будет иметь значение, только если один и тот же параметр появится более одного раза.)

0 голосов
/ 21 марта 2009

Попробуйте это в обоих случаях:

RewriteRule ^cat_ap~([^~]+)~([0-9]+)~([^~]+)~([0-9]+)(.*)\.htm$ /urban/cat_ap.php?$1=$2&$3=$4 [L]
...