停放的域重定向到子文件夹

时间:2011-07-05 18:47:54

标签: .htaccess mod-rewrite

我有2个域名:

  • maindomain.com
  • parkeddomain.com

在拥有parkeddomain.com域名之前,我的.htaccess是:

RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

现在我有了新域名,我想在子文件夹中重定向访问:/park/ 所以基本上,如果以下URI将显示完全相同的页面:

  • http://www.maindomain.com/park/
  • http://www.parkeddomain.com/

我尝试制定.htaccess规则是:

RewriteEngine on

RewriteBase /

RewriteCond %{HTTP_HOST} ^(www.)?parkeddomain.com$ 
RewriteRule ^(.*)$ /park/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

但由于一个奇怪的原因,公园[L]的{​​{1}}子句会生成内部RewriteRule,而我无法访问日志文件:(

任何解决方案? 谢谢:))

1 个答案:

答案 0 :(得分:8)

您最有可能发生500错误,因为您的规则进入了重写循环。请改用此规则:

RewriteCond %{HTTP_HOST} ^(www.)?parkeddomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.maindomain.com/park/$1 [R=302,L]
  1. 这是302时间重定向(因为您的域名已停放,有一天您可能决定实际开始使用它)。但是,如果你真的想让它成为301永久重定向

  2. 如果用户来自parkeddomain.com(例如http://www.parkeddomain.com/hello),该规则将有效。

  3. 如果您不想重定向(因此浏览器中的网址仍然显示http://www.parkeddomain.com/hello而不是http://www.maindomain.com/park/hello),请改用:

    RewriteCond %{HTTP_HOST} ^(www.)?parkeddomain\.com$ [NC]
    RewriteCond %{REQUEST_URI} !^/park/
    RewriteRule ^(.*)$ /park/$1 [L]
    

    <强>更新 此规则允许重写此类网址:parkeddomain.com/park/index.php - &gt; /park/park/index.php

    RewriteCond %{HTTP_HOST} ^(www.)?parkeddomain\.com$ [NC]
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteCond %{DOCUMENT_ROOT}/park/$1 -f
    RewriteRule ^(.*)$ /park/$1 [L]
    

    请注意:因为它使用%{ENV:REDIRECT_STATUS}可能无法在您的托管上运行(这用于检测重写循环,因此规则只会被重写一次)。