使用 .htaccess 将 www.mysite.com 请求重写为 www-staging.mysite.com

使用 .htaccess 将 www.mysite.com 请求重写为 www-staging.mysite.com

我有一个临时和生产 Apache 服务器。要访问临时,我只需转到www-staging.mysite.com/a/sub/directory。要访问生产,只需删除-staging中的www

目前,我暂存的所有链接都尝试与生产版本建立联系。我想在我的 .htaccess 文件中声明:

“如果在 www-staging 上,则将所有 mysite.com 请求修改为 www-staging.mysite.com”

.htaccess 文件对我来说就像一门外语,所以我真的很难弄清楚如何做到这一点。这是我当前的代码,它似乎对我的网站没有任何影响:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?mysite\.com$ [NC]
RewriteRule ^(.*)$ http://www-staging.mysite.com/$1 [L,R]

答案1

我相信您需要包含Options +FollowSymLinks以下内容:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?mysite\.com$ [NC]
RewriteRule ^(.*)$ http://www-staging.mysite.com/$1 [L,R]

答案2

你真正需要的是不是在您的网站中使用绝对链接,仅使用相对链接。(即,您的网页http://www.mysite.com/foo/bar不要使用像 这样的硬编码 URL /foo/bar

您要求重写内容但 Apache 却做不到这一点。

但是如果我错了,你确实使用了相对链接——你可以做一件事:为暂存和生产配置两个 VHost。如果你想消除重复,请使用 Include 语句。例如:

<VirtualHost *:80>
  ServerName www.mysite.com
  DocumentRoot /var/www/vhosts/www
  Include conf.d/www.mysite.com.common
</VirtualHost>

<VirtualHost *:80>
  ServerName www-staging.mysite.com
  DocumentRoot /var/www/vhosts/www-staging
  Include conf.d/www.mysite.com.common
</VirtualHost>

其中/etc/httpd/conf.d/www.mysite.com.common定义了两个站点的一些通用设置。

相关内容