
У меня есть следующие 2 ссылки, я не силен в правилах .htaccessеще.
Old URL: http://www.mywebsite.org.uk/donate/donate.php?charity_id=885&project_id=18111
New URL: http://new.mywebsite.org.uk/donation/to/885/18111
Мне нужен весь трафик, поступающий со старого URL-адреса на новый URL-адрес (включая параметры charity_id
& project_id
).
Я пытаюсь изучить правила .htaccess, но нахожу в интернете руководства, которые довольно расплывчаты.
Мне бы очень хотелось получить простое объяснение правил .htaccess.
(Дай человеку рыбу, и он накормится на один день,научи человека ловить рыбу, накорми его на всю жизнь).
Правильным ответом будет ответ с простым и полезным объяснением (по возможности вместе с правилами!).
решение1
Чтобы научиться настраивать правила .htaccess, вам понадобятся как минимум некоторые навыки работы с регулярными выражениями и уверенность в использовании модуля Apache mod_rewrite, поскольку он удобен для создания правил перезаписи благодаря своей гибкости.
Если да, то ваш код может быть таким:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^charity_id=([0-9]+)&project_id=([0-9]+)$
RewriteRule donate/donate.php http://new.mywebsite.org.uk/donation/to/%1/%2? [L,R=301]
Вhttp://httpd.apache.org/docs/2.4/mod/mod_rewrite.html(для версии Apache 2.4 выберите другую, если применимо) доступна полезная ссылка, поэтому вам следует начать с нее, даже для лучшего понимания кода выше.
Вы можете думать об этом RewriteRule
как о кирпичике для переписывания, поэтому каждое правило будет использовать его по крайней мере один раз. Вы будете добавлять его раньше, RewriteCond
когда вам нужно будет проверить переменные среды или ссылаться на значения строки запроса, как в нашем фрагменте кода.
Чтобы поместить обратную ссылку в строку подстановки, взятую из предыдущей, RewriteCond
вы будете использовать from %1
to %9
значения; если вам нужна обратная ссылка из первой части RewriteRule
самой строки, вы будете использовать $1
to $9
.
?charity_id=885&project_id=18111
Обратите внимание на вопросительный знак в конце URL-адреса замены, так как это способ пропустить строку запроса; если он отсутствует, в конце нового URL-адреса будет .
решение2
В другом посте sysadmin1138 написал очень хорошее введение в мод-переписывание.
Вы можете найти постздесь.
/EDIT: Пример:
old: http://example.com/path?var=val
new: http://example.com/path/var/val
.htaccess
RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule ^/path /path/%1/%2?