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/
)。
我知道这里有很多 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/
)。