#php #regex #apache #.htaccess #mod-rewrite
#php #регулярное выражение #apache #.htaccess #mod-перезапись
Вопрос:
Я пытаюсь сделать следующее:
Доступ user.php?lang=$1amp;id=$2amp;title=$3
через
en/user/1/tyler
(для английского языка)
и
user/1/tyler
(без языкового параметра)
Мои правила:
RewriteRule ^(en)(?:/(user)/([0-9] )/([a-zA-Z0-9-]*))?/?$ user.php?lang=$1amp;id=$2amp;title=$3 [L,QSA]
RewriteRule ^(user)/([0-9] )/([a-zA-Z0-9-]*)?$ user.php?lang=amp;id=$1amp;title=$2 [L,QSA]
Это работает, когда я помещаю язык (en) спереди, и я могу получить все параметры через $ _GET, но без него это не работает.
Как я мог этого добиться?
Спасибо
Ответ №1:
Вы можете попробовать эти правила:
Options -MultiViews
RewriteEngine On
RewriteRule ^(en)/user/(d )/([w-] )/?$ user.php?lang=$1amp;id=$2amp;title=$3 [L,NC,QSA]
RewriteRule ^user/(d )/([w-] )/?$ user.php?lang=amp;id=$1amp;title=$1 [L,NC,QSA]
Важно отключить MultiViews
, чтобы избежать использования службы согласования содержимого в Apache, которая может переопределять правила mod_rewrite.
Комментарии:
1. Да, мой сервер запутался, назвав два файла с одинаковыми именами в разных папках. Изменение user.php чтобы profile.php сделал свое дело. Спасибо, что указали мне правильное направление. Хорошего вам дня