我正在尝试重写以下网址:
子域应匹配任何子域。同样适用于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/dir 至 http://exampkle.nl/some/dir
(也与www。地址一起)
但是我对htaccess和重写规则的了解一般都不够好:(
我希望你们中的一个人知道解决方案。
PS。我确实尝试过搜索;)
答案 0 :(得分:3)
挑战在于必须检测并考虑四种不同的可能域模式:
所以,这个规则集的作用是检查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]
RewriteRule ^匹配任何URL,然后在前面的RewriteCond(子域)中插入第一组parens的内容与%1,并通过附加请求的路径和标志来完成重写以忽略大小写,使其成为最后一条规则,并使用搜索引擎友好的301重定向,确保重写的URL出现在用户的浏览器中。默认情况下会自动包含任何查询字符串(出现在URL中的?后面的文本)。
答案 1 :(得分:2)
试试这个: 编辑:查看对子域的更改,使用%1从RewriteCond捕获
RewriteEngine On
# Check if the hostname requested is subdomain.example.com or empty
# Now we attempt to capture the subdomain with (.*)? and reuse with %1
RewriteCond %{HTTP_HOST} ^(.*)?example.com$ [NC]
RewriteCond %{HTTP_HOST} !^$
# Rewrite it as subdomain.example.nl and redirect the browser
RewriteRule ^(.*) http://%1example.nl$1 [L,R,NE,QSA]
# Note: With the above edit for %1, this part should no longer be necessary.
# Then do the same for example.com, with or without the www
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$ [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^(.*) http://www.example.nl$1 [L,R,NE,QSA]