RewriteRule для длинного URL с параметрами / Как мне их украсить?

#apache #mod-rewrite #url-rewriting #apache2

#apache #мод-перезапись #url-перезапись #apache2

Вопрос:

Я прочитал действительно все о RewriteRules за последние недели. Ты мое последнее средство: D

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

URL моего сайта выглядит следующим образом:

 http://www.videospielkalender.de/?platform=wiiamp;setfilter=1amp;dates=2
  

Я хочу получить такой результат

 http://www.videospielkalender.de/wii/price/nextweek/
  

Вот и все.
Я надеюсь, что какой-нибудь гений здесь сможет подтолкнуть меня в правильном направлении.

Всем спасибо, Оливер

Комментарии:

1. Почему это должно быть слишком длинным? Единственное ограничение де-факто на длину составляет где-то около 2000 байт.

2. На самом деле я не имел в виду слишком длинный. Я хочу, чтобы они были красивее.

3. code <IfModule mod_rewrite.c> Перезаписать на RewriteRule ^/?test.html $ test.php RewriteRule ^([^/] )/([^/] )/([^/] )/$ /? platform = $1 amp;setfilter = $ 2 amp; dates = $ 3 </IfModule>

Ответ №1:

Последний рецепт на http://wiki.apache.org/httpd/RewriteQueryString это место для начала. В конкретном случае, о котором вы упомянули выше, вы хотели бы сделать что-то вроде:

 RewriteRule ^/?([^] )/([^] )/([^] )/? /?platform=$1amp;setfilter=$2amp;dates=$3
  

Однако с этим решением есть две довольно очевидные проблемы. Они:

  1. как нам сопоставить «цену» с «1» и «следующую неделю» с «2»? Возможно, это то, что ваш обработчик / скрипт / что угодно нужно сделать достаточно умным для выполнения

  2. Другие URI на вашем сайте (изображения, css, js, что угодно) также могут быть захвачены этим набором правил, и это может привести к сбоям.

Оба эти условия могут быть решены:

  1. Создание скрипта, достаточно умного для обработки аргументов и
  2. Вообще не используйте mod_rewrite. Вместо этого используйте:

Запасной ресурс /index.php

(или как там называется ваш корневой обработчик / скрипт) и наличие этого скрипта / обработчика напрямую разумно манипулирует PATH_INFO.

Помните, самое важное в mod_rewrite — знать, когда этого следует избегать.

Комментарии:

1. RewriteRule ^/?([^] )/([^] )/([^] )/? / ?platform = $ 1 amp; setfilter = $ 2 amp; dates = $ 3 Это приводит к сбою моего сайта: D (Ошибка 500)

2. Возможно, ты прав, и мне следует модифицировать скрипт, чтобы он стал умнее. 😀

Ответ №2:

Вы можете использовать это общее правило, чтобы переписать последний URL-путь на первый:

 RewriteRule ^/([^/] )/([^/] )/([^/] )/$ /?platform=$1amp;setfilter=$2amp;dates=$3
  

Комментарии:

1. Ничего не происходит, когда я ввожу это. Я думаю, что мой скрипт должен стать умнее.

2. @Oliver Ruehl: Если вы хотите использовать это правило в файле .htaccess, удалите начало / из шаблона.

3. Ничего не происходит 🙁 RewriteRule ^/([^/] )/([^/] )/([^/] )/$ ? платформа = $ 1 amp; setfilter = $ 2 amp; даты = $3

4. @Oliver Ruehl: Вам нужно удалить начало / из шаблона , а не из замены : RewriteRule ^([^/] )/([^/] )/([^/] )/$ /?platform=$1amp;setfilter=$2amp;dates=$3

5. По-прежнему безрезультатно. Вот полный код: RewriteRule ^([^/] )/([^/] )/([^/] )/$ /?platform=$1amp;setfilter=$2amp;dates=$3