htaccess RewriteRule - 如何将获取参数替换为 &

htaccess RewriteRule - how to replace get parameter to &

我知道这里有很多 post 关于 RewriteRule 正则表达式的问题,但我的一个是不同的。 我按照本教程 (https://www.visualscope.com/seo-friendly-urls.html) 制作了一个 seo 友好 url 并且它可以工作,除非用户更改语言。

URL(有效):

/wedding-venue-details/abc-hotel/ -> /wedding-venue-details/?seoURL=abc-hotel

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^wedding-venue-details/(.*)$ ./wedding-venue-details/?seoURL=
</IfModule>

但如果用户尝试更改此页面中的语言,URL 将变为:

/wedding-venue-details/abc-hotel/?lang=en

我只是不知道如何将 ?lang=en 替换为 &lang=en 并追加到末尾,我尝试了但仍然无法正常工作。

RewriteRule ^wedding-venue-details/(.*)$ ./wedding-venue-details/?seoURL=

您需要使用 QSA(查询字符串附加)标志将 lang=en 参数附加到重写的 URL 上的查询字符串的末尾。 Apache 然后处理 URL 参数的合并并正确格式化查询字符串。

您还缺少 L 标志(如果您添加更多指令则很重要)。

例如:

RewriteRule ^wedding-venue-details/(.*) wedding-venue-details/?seoURL= [QSA,L]

您应该从 substitution 字符串中删除 ./ 前缀(它在这里没有位置 - get 稍后解决)。

这会将 /wedding-venue-details/abc-hotel/?lang=en 重写为 /wedding-venue-details/?seoURL=abc-hotel/&lang=en。请注意,尽管您的示例另有说明,这会将尾部斜杠复制到 seoURL 参数值。


补充:

尽管 /wedding-venue-details/?seoURL=abc-hotel/ 严格来说不是有效的 end-point。这仍然依赖于其他 Apache modules/directives 将请求路由到文件(或“front-controller”),例如。 index.html(或index.php)来实际处理请求。例如,这可能应该是 /wedding-venue-details/index.html?seoURL=abc-hotel/(如果使用 PHP,则可能是 /wedding-venue-details/index.php?seoURL=abc-hotel/)。