我一直在寻找(这里和谷歌),我找不到真正适合我的答案。基本上,我有两个物理服务器(开发服务器和生产服务器),我希望能够在我的git仓库中使用一个.htaccess文件。
通常情况下这并不困难,但我有两个域名example.com
和longexample.com
。我在我的DNS主机上将longexample.com
和dev.longexample.com
的CNAME设置为example.com
(和dev.example.com
),并在两台服务器上设置apache ServerName / ServerAlias:
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并开发到正确的url(当一切正常时我将使它们成为301s),但它似乎不起作用。就像现在一样,它什么也没做。如果我将RewriteRule设置为[N]
而不是[L]
,则会给我一个无限循环。
第一个块被注释掉了,因为如果我让它在开发服务器上工作,那么prod的解决方案应该很明显。最后一个块向example.com/about.html
请求重定向到example.com/about
(同时仍然使用/about.html
文件。该部分正常工作。
使用两个域是否存在问题?我也尝试使用%{SERVER_NAME}
代替%{HTTP_HOST}
,但没有任何变化。
答案 0 :(得分:1)
[OR]
链条混乱了。这是有效的:
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]