htacces重写tld而不改变子域或dirs

Tji*_*irp 5 apache .htaccess

我正在尝试重写以下网址:

子域应匹配任何子域.同样适用于TLD.两者:http://car.example.com/http://cat.example.co.uk都应该重写

http://subdomain.example.com/some/dir 访问 http://subdomain.example.nl/some/dir

http://example.com/some/dirhttp://exampkle.nl/some/dir

(也有www.地址)

但是我对htaccess和重写规则的了解一般都不够好:(

我希望你们中的一个人知道解决方案.

PS.我确实尝试过搜索;)

Eri*_*ic3 3

挑战在于必须检测并解释四种不同的可能的域模式:

  • example.com → example.nl
  • example.co.uk → example.nl
  • sub.example.com → sub.example.nl
  • sub.example.co.uk → sub.example.nl

因此,此规则集的作用是检查 TLD 是否不是 .nl(防止发生循环),然后将子域(无论是否为 www)从前面拉出(读作“捕获除点后跟点之外的任何内容,可选),后面是基本域,最后是一个点。我们不必匹配整个 URL,因为我们不保留 TLD。

RewriteEngine On
RewriteCond %{HTTP_HOST} !example\.nl$
RewriteCond %{HTTP_HOST} ^([^.]+\.)?example\.
RewriteRule ^ http://%1example.nl%{REQUEST_URI} [NC,L,R=301]
Run Code Online (Sandbox Code Playgroud)

RewriteRule的^匹配任何URL,然后用%1插入前面的RewriteCond(子域)中第一组括号的内容,并通过附加请求的路径和忽略大小写的标志来完成重写,将此作为最后一个规则,并使用搜索引擎友好的 301 重定向,确保重写的 URL 出现在用户的浏览器中。默认情况下,任何查询字符串(出现在 URL 中 ? 之后的文本)都会自动包含在内。