запрос mod_rewrite на симпатичный url

#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 не будут совпадать с началом / . Кроме того, первая группа a RewriteRule не может соответствовать строке запроса, поэтому требуется RewriteCond использовать %{QUERY_STRING}