[英]htaccess RewriteRule - how to replace get parameter to &
我知道这里有很多关于 RewriteRule 正则表达式问题的帖子,但我的一个是不同的。 我按照本教程( https://www.visualscope.com/seo-friendly-urls.html )制作一个 seo 友好的 Z572D4E421E5E6B9BC11D815E8A027112 用户更改和工作时除外。
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=$1
</IfModule>
但如果用户尝试更改此页面中的语言,URL 将变为:
/wedding-venue-details/abc-hotel/?lang=en
我只是不知道如何将?lang=en
替换为&lang=en
和 append 到最后,我尝试了但仍然无法正常工作。
RewriteRule ^wedding-venue-details/(.*)$./wedding-venue-details/?seoURL=$1
您需要使用QSA
(查询字符串附加)标志到 append 的lang=en
参数到重写的 URL 上的查询字符串的末尾。 Apache 然后处理 URL 参数的合并并正确格式化查询字符串。
您还缺少L
标志(如果您添加更多指令,这很重要)。
例如:
RewriteRule ^wedding-venue-details/(.*) wedding-venue-details/?seoURL=$1 [QSA,L]
您应该从替换字符串中删除./
前缀(它在这里没有位置 - get 稍后会被解决)。
这会将/wedding-venue-details/abc-hotel/?lang=en
重写为/wedding-venue-details/?seoURL=abc-hotel/&lang=en
。 请注意,尽管您的示例另有说明,但这会将尾部斜杠复制到seoURL
参数值。
更新:虽然/wedding-venue-details/?seoURL=abc-hotel/
严格来说不是一个有效的端点。 这仍然依赖于其他 Apache 模块/指令将请求路由到文件(或“前端控制器”),例如。 index.html
(或index.php
)来实际处理请求。 例如,这应该是/wedding-venue-details/index.html?seoURL=abc-hotel/
(或者/wedding-venue-details/index.php?seoURL=abc-hotel/
如果使用 PHP)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.