绑定域名重定向到子文件夹绑定、文件夹、重定向、域名

2023-09-02 11:25:28 作者:回望

我有2个域名:

maindomain.com parkeddomain.com

具有 parkeddomain.com 域之前,我的的.htaccess 是:

  RewriteEngine叙述上

的RewriteBase /

的RewriteCond%{} REQUEST_FILENAME!-f
的RewriteCond%{} REQUEST_FILENAME!-d
重写规则。*的index.php [L]
 

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

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

我试图做一个的.htaccess 规则是:

  RewriteEngine叙述上

的RewriteBase /

的RewriteCond%{HTTP_HOST} ^(WWW)?parkeddomain.com $
重写规则^(。*)$ /公园/ $ 1 [L]

的RewriteCond%{} REQUEST_FILENAME!-f
的RewriteCond%{} REQUEST_FILENAME!-d
重写规则。*的index.php [L]
 

但对于一个奇怪的原因,园区的 [L] 条款重写规则产生一个内部 500错误,和我没有访问日志文件:(

任何解决办法? 感谢:)

解决方案 域名重定向怎么解决

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

 的RewriteCond%{HTTP_HOST} ^(WWW)?parkeddomain  .COM $ [NC]
重写规则^(。*)$ 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}!^ /公园/
重写规则^(。*)$ /公园/ $ 1 [L]
 

更新 此规则将允许改写即使这种网址: parkeddomain.com/park/index.php - > /park/park/index.php

 的RewriteCond%{HTTP_HOST} ^(WWW)?parkeddomain  .COM $ [NC]
的RewriteCond%{ENV:REDIRECT_STATUS} ^ $
的RewriteCond%{DOCUMENT_ROOT} /公园/ $ 1 -F
重写规则^(。*)$ /公园/ $ 1 [L]
 

请注意:,因为它使用了%{ENV:REDIRECT_STATUS} 是可以不是你的托管工作(这是用来检测重写循环,使该规则只重写一次)。

I have 2 domain:

maindomain.com parkeddomain.com

Before having the parkeddomain.com domain, my .htaccess was:

RewriteEngine on

RewriteBase /

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

Now that I have the new domain, I want to redirect the visits in a subfolder: /park/ So basically, if the following URI would display the exact same page:

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

My attempt to make a .htaccess rule was:

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]

But for a strange reason, the [L] clause of the park RewriteRule generate an internal 500 error, and I don't have access to the log file :(

Any solution ? thanks :)

解决方案

You have 500 error most likely because your rule enters into a rewrite loop. Try this rule instead:

RewriteCond %{HTTP_HOST} ^(www.)?parkeddomain.com$ [NC]
RewriteRule ^(.*)$ http://www.maindomain.com/park/$1 [R=302,L]

It is 302 temporal redirect (because your domain is parked and one day you may decide to actually start using it). But if you really want to can make it 301 Permanent redirect

The rule will work if user come via parkeddomain.com (e.g. http://www.parkeddomain.com/hello).

If you do not want redirect (so URL in a browser still shows http://www.parkeddomain.com/hello instead of http://www.maindomain.com/park/hello), use this instead:

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

UPDATE This rule will allow to rewrite even this kind of URLs: 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]

PLEASE NOTE: Because it uses %{ENV:REDIRECT_STATUS} it may not work on your hosting (this is used to detect rewrite loop so the rule is only rewritten once).