.htaccess перезапись во второй раз перезаписать папку 2-го уровня обращения=информация

StackOverflow https://stackoverflow.com/questions/424037

  •  05-07-2019
  •  | 
  •  

Вопрос

Я хотел установить .htaccess чтобы переписать:

example.com/bla/info/

Для

example.com/info/index.php?q=bla

example.com/bla/info/txt/

Для

example.com/info/index.php?q=bla&t=txt

Я хотел, чтобы браузер по-прежнему отображал:

example.com/bla/info/txt/

Я не хотел переписывать в перезаписях уровня 2, например:

example.com/bla/xxx/ 

или

example.com/ccc/zzz/aaa/

но

example.com/silly/info/ 

будет работать так же хорошо, как

example.com/strange/info/mytxt/

Имело ли это смысл?

Какая-нибудь помощь?

Это было полезно?

Решение

Если вы начинаете свой шаблон с ^ и заканчиваете его с $, правило будет применяться только в том случае, если совпадает вся строка.

RewriteRule   ^/bla/info/$      /info/index.php?q=bla
RewriteRule   ^/bla/info/txt/$  /info/index.php?q=bla&t=txt

Если вы используете опцию "не использовать [R]", URL-адрес, отображаемый в браузере, будет таким, какой ввел пользователь.

Вы пытаетесь сделать это универсальным?Если это так, вы можете использовать сопоставление типов регулярных выражений и подстановку переменных.Чтобы 'bla' соответствовало любой строке вплоть до следующей косой черты (/), используйте

([^/]+)

в вашем шаблоне и укажите на него 1 доллар в вашей замене.

RewriteRule ^/([^/]+)/info/$          /info/index.php?q=$1
RewriteRule ^/([^/]+)/info/([^/]+)/$  /info/index.php?q=$1&t=$2

Я рекомендую Веб-страницы Apache о mod_rewrite для получения дополнительной информации.

[Править.Исправлены правила, запрещающие включать имя хоста в шаблон, как было указано в оригинальном постере.]

--
bmb

Другие советы

ты наставил меня на правильный путь.

в итоге у меня получилось что-то вроде этого:

RewriteRule ^([^/\.]+)/info/?$ example/info/index.php?q=$1 [L]

большое спасибо

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top