用.htaccess重写部分网址

时间:2016-06-13 16:18:50

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

我需要重写网址并保存顶级域名和查询。

我尝试使用这些规则

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 重写它保存所有其他请求网址的一部分。

1 个答案:

答案 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]