.htaccess - htaccess rewritecondition 具有多种语言的多个 TLD
问题描述
我正在为带有单独博客(WordPress)的网店(自定义框架)制定一些 htaccess 重写条件/规则。
该商店位于:shop.tld/lang/(具有多语言的多个 TLD)
该博客位于:blog.com
我们希望将博客合并到网店结构中(没有重定向),例如:
# shop.*/{?lang}/blog/{category}/{?post} (where lang and post are optional)
到目前为止我所掌握的类别的条件和规则(适用于所有非荷兰语语言):
# shop.*/(lang != nl)/blog/{category} ==> blog.com/{lang}/category/{category}
RewriteCond %{HTTP_HOST} ^(.*)?shop\.(.*)\/((?!nl).*)\/blog$ [NC]
RewriteRule ^(.*)/blog/(.*)$ https://blog.com/$1/category/$2 [L]
但是'nl'(荷兰语=母语)语言不应该被带到博客URL。所以:
# shop.*/nl/blog/{category} ==> blog.com/category/{category}
RewriteCond %{HTTP_HOST} ^(.*)?shop\.(.*)\/nl\/blog$ [NC]
RewriteRule ^(.*)/blog/(.*)$ https://blog.com/category/$2 [L]
帖子的首选条件/重写如下:
# shop.*/{lang != nl}/blog/{category}/{post} ==> blog.com/{lang}/{post}
对于荷兰语:
# shop.*/nl/blog/{category}/{post} ==> blog.com/{post}
此外,当博客上的帖子/类别语言不是“nl”/荷兰语时,帖子标题和类别名称以 -lang 为后缀。例如:
nl: post-title-1
en: post-title-1-en
fr: category-name-fr
如果我们可以在店面“清理”,那就太好了。所以所有看起来都像'nl'变体(SEO明智的更好选择)
我似乎无法匹配以下 URL(正则表达式再次测试 URL 字符串完全匹配,但 htaccess 不是)
:
shop.com/nl/blog/category-1 => blog.com/category-1
shop.nl/nl/blog/category-2 => blog.com/category-2
shop.de/de/blog/category-2 => blog.com/de/category-2-de
shop.com/en/blog/category-2 => blog.com/en/category-2-en
帖子
shop.be/nl/blog/category-1/post-1 => blog.com/post-1
shop.com/en/blog/category-1/post-1 => blog.com/en/post-1-en
希望你们中的任何人都可以帮助我,或者至少将我推向正确的方向。
非常感谢和我的长篇文章的借口。
注意:在不久的将来,我们希望将所有发往 blog.com 的直接请求重定向到 shop.tld/lang/blog(tld 取决于用户语言)。我不知道这些当前的重定向是否会妨碍默认 WordPress 主 URL 更改的方式(/创建无限循环)。
解决方案
对自己的回答:
正在查看 RewriteCond 中的 HTTP_HOST。
但应该改为查看 REQUEST_URI。
推荐阅读
- flask - Flask 找不到应用程序文件
- facebook - 页面公共内容访问速率限制
- javascript - 用于 .split() 的正则表达式以分隔除引号之外的空格上的字符串
- python - Tkinter 在 python 3.6 中出现以下错误:TclError: NULL main Window
- php - PayPal 付款执行错误:此操作不支持方法类型
- linux - 我的 bash 脚本在 kill 命令后不会执行命令
- r - 通过使用 navbarPanel() 并隐藏导航栏来构建多页闪亮的应用程序用户端(在 ui.R 中)?
- protractor - 如何使用量角器选择下拉菜单?
- r - 尝试在 R 中调整 Apriori 算法的外观
- c# - 如何每 2 小时(定期)将文件从 Azure 文件存储复制到本地计算机?