我有 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]
    

    但是出于一个奇怪的原因,park [L]RewriteRule 子句生成了一个内部 500 error ,而我无权访问日志文件:(

    任何解决方案?
    谢谢 :)

    最佳答案

    您有 500 错误很可能是因为您的规则进入了重写循环。试试这个规则:

    RewriteCond %{HTTP_HOST} ^(www.)?parkeddomain\.com$ [NC]
    RewriteRule ^(.*)$ http://www.maindomain.com/park/$1 [R=302,L]
    
  • 它是 302 临时重定向(因为您的域已停放,有一天您可能决定实际开始使用它)。但是如果你真的想要可以让它 301 永久重定向
  • 如果用户来自 parkeddomain.com(例如 http://www.parkeddomain.com/hello ),则该规则将起作用。

  • 如果您 不想重定向 (因此浏览器中的 URL 仍然显示 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]
    

    更新
    这条规则甚至允许重写这种 URL:parkeddomain.com/park/index.php -> /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} 可能 在您的主机上不起作用(这用于检测重写循环,因此规则只重写一次)。

    关于.htaccess - 停放的域重定向到子文件夹,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6587402/

    10-11 23:14
    查看更多