Необязательный параметр в mod_rewrite (красивый URL)

#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 сделал свое дело. Спасибо, что указали мне правильное направление. Хорошего вам дня