htaccess和GET参数在同一网站空间上的两个域,但内容/语言不同

时间:2019-02-02 23:50:11

标签: php apache .htaccess mod-rewrite url-parameters

我需要重写规则或其他一些解决方案来访问类似

的页面
www.domain.com/feature.php?lang=de

来自

www.domain.de/feature.php

位于同一网站空间
www.domain.com.

从一开始:

我有一个域

www.domain.com 

具有由语言GET参数触发的多语言内容。

例如:

www.domain.com/features.php?lang=fr 

将从数据库中加载法语内容,而

www.domain.com/features.php 

显示默认的英语内容。

对于SEO友好的干净URL,我创建了以下通用htaccess重写规则:

RewriteRule ^/?(.*)/(.*).php /$2.php?lang=$1 [L,QSA]

这将使url像

www.domain.com/features.php?lang=fr

可从SEO友好版本访问:

www.domain.com/fr/features.php

其他语言,例如

www.domain.com/features.php?lang=it

涵盖了这一点,可以通过干净的URL进行访问

www.domain.com/it/features.php

我需要的是德语特殊情况的解决方案,因为对于德语,我有一个专用域domain.de。因此,不应通过

这样的路径网址来访问它
www.domain.com/de/features.php 

与其他语言一样,但来自

www.domain.de/features.php

我可能必须将domain.de的域目标指向与domain.com相同的Web空间,因为它们共享相同的php文件,样式表和图像。

我不知道如何编辑htaccess文件以覆盖.de域。

请考虑,除了hidden lang参数之外,还有一些页面也需要传递一些GET参数。他们不需要被隐藏。他们只需要通过。例如

www.domain.com/features.php?lang=de&a=1&b=2

应该可以通过

访问
www.domain.de/features.php?a=1&b=2

我当前的htaccess RewriteRule已经在最后由[L,QSA]涵盖了.com / x /域的其他参数。但是我不知道如何设置它以覆盖来自.de域的访问,包括偶尔出现的GET参数。

这应该是一个通用的解决方案。因此,我不必为每个php文件都输入一行,而是应该覆盖所有php文件名,因为上面已经存在的RewriteRule对于.com域已经存在。

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为,这至少应该为您提供一个起点:

Options -Indexes
RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.example.de$[OR]
RewriteCond %{HTTP_HOST} ^example.de$
RewriteRule ^/?(.*)$ http://www.example.com/de/$1 [R=301,L,QSA]

RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^/?(.*)/(.*).php /$2.php?lang=$1 [L,QSA]