我需要重写网址并保存顶级域名和查询。
我尝试使用这些规则
RewriteEngine On
RewriteBase /
RewriteRule ^domain(.*)$ http://newdomain$1 [R=302,NE,L]
使用this testing tool我发现如果将 domain.com/query?param=value 用作请求网址,则可以使用此功能。但是,如果我尝试使用 http://domain.com/query?param=value [它不起作用。
基本上我不关心什么协议(http或https),我只需要替换第一次出现的域字符串并用 newdomain 重写它保存所有其他请求网址的一部分。
答案 0 :(得分:1)
正如您在评论中发现的那样,我给您的第一个答案实际上是尝试仅替换传入请求的主机名的 part ,但保留路径和查询字符串。抱歉,我的问题并不清楚。
你必须使用额外的RewriteCond
,因为正如你所说的那样,在RewriteRule
内完全访问主机名之前。所以我想以下内容涉及到您实际需要的方向:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^[^\.]+\.(.+)$
RewriteCond %{HTTP_HOST} !^newdomain\.(.+)$
RewriteRule ^(.*)$ http://newdomain.%1/$1 [R=301,L,QSA]
您可能还想尝试此修改以保留原始请求方案:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^[^\.]+\.(.+)$
RewriteCond %{HTTP_HOST} !^newdomain\.(.+)$
RewriteRule ^(.*)$ %{REQUEST_SCHEME}://newdomain.%1/$1 [R=301,L,QSA]