#regex #.htaccess #mod-rewrite #url-rewriting
Вопрос:
У меня есть такой URL магазина
И я пытаюсь переписать его в .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]