#mod-rewrite
#переписать мод
Вопрос:
допустим, у меня есть URL вида:myurl.com/index.php?m=1 и я хочу сопоставить его с myurl.com/aboutus это означает, что я хочу, чтобы браузер отображал последний URL в строке выше. итак, что я делаю в первую очередь, это перехватываю aboutus и сопоставляю его с index.php?m = 1.
RewriteRule ^aboutus$ /index.php?m=1
теперь, если я введу myurl.com/aboutus отображается нужная страница, НО я хочу, чтобы все было наоборот, поэтому даже когда я набираю /index.php?m = 1, я хочу, чтобы браузер показывал /aboutus.
как я могу добиться этого с помощью mod_rewrite?
любая помощь приветствуется!
приветствую,
b
Ответ №1:
RewriteEngine on
RewriteCond %{QUERY_STRING} =m=1
RewriteCond %{REQUEST_URI} =/index.php
RewriteRule ^.* /aboutus? [R=301]
RewriteRule ^aboutus /index.php?m=1 [QSA]
Обновление # 1
RewriteEngine on
RewriteCond %{QUERY_STRING} =m=1
RewriteCond %{REQUEST_URI} =/index.php
RewriteRule ^.* /kepek? [R=301]
RewriteCond %{QUERY_STRING} =m=2
RewriteCond %{REQUEST_URI} =/index.php
RewriteRule ^.* /paroknak? [R=301]
RewriteCond %{QUERY_STRING} =m=3
RewriteCond %{REQUEST_URI} =/index.php
RewriteRule ^.* /magam? [R=301]
RewriteCond %{QUERY_STRING} =m=4
RewriteCond %{REQUEST_URI} =/index.php
RewriteRule ^.* /kapcsolat? [R=301]
RewriteRule ^kepek /index.php?m=1amp;redirected=1 [QSA]
RewriteRule ^paroknak /index.php?m=2amp;redirected=1 [QSA]
RewriteRule ^magam /index.php?m=3amp;redirected=1 [QSA]
RewriteRule ^kapcsolat /index.php?m=4amp;redirected=1 [QSA]
Комментарии:
1. это работает, но как я могу сделать это и для других номеров? извините, мой вопрос вообще не был обобщен: (
2. Если таких чисел много, я бы предложил сделать перенаправления из /index.php?m =… запрос на страницы с соответствующим именем в index.php сам по себе. Просто проверьте QUERY_STRING.
3. их всего 4, и я не могу изменить index.php :-/
4. Всего 4? Затем просто создайте аналогичные разделы, как показано выше, для каждого номера, который у вас есть.
5. если я просто скопирую строки выше (кроме 1 строки) и изменю m = 1 на {2,3,4}, а aboutus — на другие строки, я получу 310: слишком много перенаправлений.
Ответ №2:
Вы хотите сопоставить номера страниц типа 1-> о программе, 2-> новости …?
Кроме того, ваше желаемое поведение звучит как бесконечный цикл перенаправления.
Комментарии:
1. да, это именно то, чего я хочу. и для меня это также выглядит как бесконечный цикл, но я не хочу, чтобы какие-либо параметры отображались в URL, но у меня уже есть страница, и в html ссылки кодируются параметрами, как обычные get URL, поэтому я не могу изменить их, чтобы они были красивыми : (
Ответ №3:
RewriteRule ^aboutus$ /index.php?m=1 [L]
RewriteRule ^index.php?m=1$ /aboutus [301,L]
Комментарии:
1. На самом деле это правило работает в обратном направлении. Причина, по которой выдается ошибка 500, заключается в том, что файл ‘aboutus’ не существует.
2. Это неправильно по нескольким причинам. Ошибка 500 на самом деле вызвана тем, что флаг во 2-м правиле неверен, так и должно быть
[R=301,L]
. Кроме того, поскольку пользователь указал, что правила находятся в.htaccess
файле, RewriteRules не будут совпадать с началом/
. Кроме того, первая группа aRewriteRule
не может соответствовать строке запроса, поэтому требуетсяRewriteCond
использовать%{QUERY_STRING}