URL 中可选语言的 Mod 重写规则

时间:2021-07-06 11:49:05

标签: regex .htaccess mod-rewrite url-rewriting

我有一个这样的商店网址

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

我正在尝试用 .htaccess 将其重写为 https://domain.eu/lp/index.php?id=$2&lang=$1

我非常接近

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

工作正常,但当 URL 中没有 lang 时,我似乎无法找到处理这种情况的方法。

所以这也是有效的:https://domain.eu/lp/9200 但在这种情况下我希望 $1 只是空的(或者当它不存在时有一个默认值)

我知道“?”表示“一或零”次,这就是我尝试的原因

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

但它没有按预期工作。任何方向正确的点都将不胜感激。

1 个答案:

答案 0 :(得分:0)

使用您展示的样品,尝试;请按以下方式获取您的 htaccess 规则文件。在测试您的网址之前,请务必清除浏览器缓存。

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=$2&lang=$1 [NC,L]


OR 使用以下解决方案,以防您尝试访问的 uri 不存在。确保使用第一个解决方案或这个解决方案,一次只使用一次。

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=$2&lang=$1 [NC,L]