.htaccess перезапись во второй раз перезаписать папку 2-го уровня обращения=информация
-
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]
большое спасибо