apache - 将子域重定向到另一种语言的获取查询字符串.htaccess

标签 apache .htaccess redirect mod-rewrite url-rewriting

如果有人调用我的域名 en.sparkm4n.de 但应该得到 www.sparkm4n.de/index.php?lang=en,我仍然在努力弄清楚如何准确地重定向用户。我想保留子域,但我希望 .htaccess 的脚本完全调用 php 脚本,该脚本会翻译子域内的所有内容。到目前为止,我有 3 个子域名,例如英语的 en.sparkm4n.de,法语的 fr.sparkm4n.de,西类牙语的 es.sparkm4n.de,而顶级域名 www 基本上是德语。到目前为止我尝试过:

RewriteEngine on
RewriteCond %{QUERY_STRING} !^en=
RewriteCond %{HTTP_HOST} ^(?!www\.)(.+)\.sparkm4n\.de$
RewriteRule ^(/?)$ $1?lang=%1en

我不太确定它是否做正确的事情,因为我对 .htaccess 正则表达式完全陌生。 将 3 个子域包含在一个 .htaccess 中并准确地将内容从顶级获取查询提取到子域中,什么是更好的解决方案?子文件夹内没有内容,但它应该重定向到包含所有内容和脚本的顶级域

最佳答案

像这样:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} !(?:^|&)lang= [NC]
RewriteCond %{HTTP_HOST} ^(?!www\.)(.+)\.sparkm4n\.de$ [NC]
RewriteRule ^ %{REQUEST_URI}?lang=%1 [L,QSA]

请注意,如果缺少该参数,这将使用附加的 lang 参数重写每个页面。 这不会在浏览器 URL 中显示 lang 参数,因为我们没有使用 R 标志进行完整(外部)重定向。

关于apache - 将子域重定向到另一种语言的获取查询字符串.htaccess,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75152041/

相关文章:

regex - 如何定义重写规则以接受除 a-zA-Z- 之外的空字符串?

php - 如何使路由在多个 CodeIgniter 应用程序中工作?

Apache CXF Rest 客户端清晰度

ruby - 一个网络服务器上有多个 Ruby 版本?

.htaccess - 如果地址是子文件夹,htaccess 重写吗?

linux - linux中流水线和重定向的区别

redirect - 如何检查页面将重定向到的位置

javascript - 返回到在 Express 中进行重定向调用的文件

PHP 查询字符串限制

apache - 域重定向到www时如何将www子域重定向到非www