Apache 用两台服务器和三个子域重写mod_?

Apache 用两台服务器和三个子域重写mod_?,apache,mod-rewrite,dns,Apache,Mod Rewrite,Dns,我一直在四处寻找(包括这里和谷歌),但我找不到一个真正适合我的答案。基本上,我有两个物理服务器(一个开发服务器和一个生产服务器),我希望能够在我的git repo中使用一个.htaccess文件 通常这并不困难,但我有两个域,example.com和longexample.com。我在DNS主机上将longexample.com和dev.longexample.com的CNAMEs设置为example.com(和dev.example.com),并在两台服务器上设置apache服务器名/服务器别

我一直在四处寻找(包括这里和谷歌),但我找不到一个真正适合我的答案。基本上,我有两个物理服务器(一个开发服务器和一个生产服务器),我希望能够在我的git repo中使用一个.htaccess文件

通常这并不困难,但我有两个域,
example.com
longexample.com
。我在DNS主机上将
longexample.com
dev.longexample.com
的CNAMEs设置为
example.com
(和
dev.example.com
),并在两台服务器上设置apache服务器名/服务器别名:

dev server:
    ServerName dev.example.com
    ServerAlias dev.longexample.com

prod server:
    ServerName example.com
    ServerAlias longexample.com
    ServerAlias www.example.com
    ServerAlias www.longexample.com
这是我的.htaccess文件:

Options +FollowSymlinks +Indexes
RewriteEngine on

# RewriteCond %{HTTP_HOST} ^www.longexample.com$ [NC,OR]
# RewriteCond %{HTTP_HOST} ^longexample.com$ [NC,OR]
# RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
# RewriteRule ^(.*)$ http://example.com/$1 [R,N]

RewriteCond %{HTTP_HOST} ^dev\.longexample\.com$ [NC]
RewriteRule ^(.*)$ http://dev.example.com/$1 [R,L]

RewriteRule ^([^\.]+)$ $1.html [NC,L]
RewriteCond %{THE_REQUEST} ^GET\ ([^\.]+)\.(html|htm) [NC]
RewriteRule ^([^\.]+)\.(html|htm)$ %1 [R,NC,L]
据推测,前两个块应该将prod和dev重写为正确的url(当一切正常时,我会将它们设置为301s),但它似乎不起作用。就像现在一样,它什么也不做。如果我将RewriteRule设置为
[N]
而不是
[L]
,它会给我一个无限循环

第一个块被注释掉了,因为如果我让它在dev服务器上工作,prod的解决方案应该是显而易见的。最后一个块请求
example.com/about.html
重定向到
example.com/about
(同时仍使用
/about.html
文件。该部分工作正常


使用两个域有什么问题吗?我也尝试过使用
%{SERVER\u NAME}
而不是
%{HTTP\u HOST}
,但没有任何变化。

啊哈,想出来了!似乎是一连串的
[或]
把事情搞砸了。以下是有效的方法:

Options +FollowSymlinks +Indexes
RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.yoshokatana\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^yoshokatana\.com$ [NC]
RewriteRule ^(.*)$ http://yosho.me/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^www\.yosho\.me$ [NC]
RewriteRule ^(.*)$ http://yosho.me/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^dev\.yoshokatana\.com$ [NC]
RewriteRule ^(.*)$ http://dev.yosho.me/$1 [R,L]

RewriteRule ^([^\.]+)$ $1.html [NC,L]
RewriteCond %{THE_REQUEST} ^GET\ ([^\.]+)\.(html|htm) [NC]
RewriteRule ^([^\.]+)\.(html|htm)$ %1 [R=301,NC,L]

啊哈,想通了!好像是一连串的
[或]
把事情搞砸了。下面是有效的方法:

Options +FollowSymlinks +Indexes
RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.yoshokatana\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^yoshokatana\.com$ [NC]
RewriteRule ^(.*)$ http://yosho.me/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^www\.yosho\.me$ [NC]
RewriteRule ^(.*)$ http://yosho.me/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^dev\.yoshokatana\.com$ [NC]
RewriteRule ^(.*)$ http://dev.yosho.me/$1 [R,L]

RewriteRule ^([^\.]+)$ $1.html [NC,L]
RewriteCond %{THE_REQUEST} ^GET\ ([^\.]+)\.(html|htm) [NC]
RewriteRule ^([^\.]+)\.(html|htm)$ %1 [R=301,NC,L]

您应该接受您的答案,这样问题将显示为“已解决”。请阅读Yahoo Slow的聪明建议,并转到“为组件使用无Cookie域”部分,您将理解为什么在没有“www”的情况下重定向到URL是不好的。您应该接受您的答案,这样问题将显示为“已解决”请在这里阅读Yahoo Slow的聪明建议,并转到“为组件使用无Cookie域”部分,您将理解为什么不使用“www”重定向到URL是不好的