Правило перезаписи модов для необязательного языка в URL

#regex #.htaccess #mod-rewrite #url-rewriting

Вопрос:

У меня есть такой URL магазина

https://domain.eu/cz/lp/9200

И я пытаюсь переписать его в .htaccess, чтобы https://domain.eu/lp/index.php?id=2 доллара и ланг=1 доллар

Я подошел очень близко к

 RewriteRule ^/?(hr|sk|pl|cz|ro|it)/lp/(d )?$ /lp/index.php?id=$2amp;lang=$1
 

что работает нормально, но я, похоже, не могу найти способ справиться с ситуацией, когда в URL нет языка lang.

Так что это тоже справедливо: https://domain.eu/lp/9200 но в этом случае я хочу, чтобы 1 доллар был просто пустым (или имел значение по умолчанию, когда его нет).

Я знаю, что «?» означает «один или ноль» раз, вот почему я пытался

 RewriteRule ^/?[(hr|sk|pl|cz|ro|it)?]/lp/(d )?$ /lp/index.php?id=$2amp;lang=$1
 

Но это работает не так, как ожидалось. Любая точка в правильном направлении будет оценена по достоинству.

Ответ №1:

С показанными вами образцами, попытками; пожалуйста, создайте файл правил htaccess следующим образом. Перед проверкой URL-адресов обязательно очистите кэш браузера.

 RewriteEngine ON
##Rewrite rule for uris which have only 1 parameter.
RewriteRule ^lp/(d )/?$ /lp/index.php?id=$1 [NC,L]
##Rewrite rule for uris which 2 parameters.
RewriteRule ^(hr|sk|pl|cz|ro|it)/lp/(d )/?$ /lp/index.php?id=$2amp;lang=$1 [NC,L]
 


ИЛИ используйте следующие решения, если URI, к которым вы пытаетесь получить доступ, не существуют. Убедитесь, что вы используете либо 1-е решение, ЛИБО это, только один раз за раз.

 RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^lp/(d )/?$ /lp/index.php?id=$1 [NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(hr|sk|pl|cz|ro|it)/lp/(d )/?$ /lp/index.php?id=$2amp;lang=$1 [NC,L]