#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» и «следующую неделю» с «2»? Возможно, это то, что ваш обработчик / скрипт / что угодно нужно сделать достаточно умным для выполнения
-
Другие URI на вашем сайте (изображения, css, js, что угодно) также могут быть захвачены этим набором правил, и это может привести к сбоям.
Оба эти условия могут быть решены:
- Создание скрипта, достаточно умного для обработки аргументов и
- Вообще не используйте 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