我有一个在cpanel之前的子域设置(sub.domain.comredirect到domain.com/sub/),突然间我今天突然发现它是在浏览器中重写URL到www.domain.com/sub/,而不是只是把它留在sub.domain.com。 我不知道是什么问题,但决定删除我的子域,并在cPanel重新创build它。 现在我只能访问www.sub.domain.com(sub.domain.com产生一个服务器没有find错误)。
编辑:问题似乎与.htaccess文件。 删除后,事情恢复正常。 但是现在我的新问题是如何正确configuration.htaccess文件。 我最初调整了它,试图完成以下内容:
我有三个文件夹,live,staging和dev:
1)domain.com或www.domain.com的请求被定向到domain.com/live(并且用户看到的URL总是被重写为www.domain.com)。
2)请求staging.domain.com和dev.domain.com或分别定向到domain.com/staging和domain.com/dev,并且用户在浏览器中看到staging.domain.com或dev.domain.com 。
3)当我将其添加到cPanel中时,任何子域通常都不会被浏览器重写。
我当前的.htaccess文件完成数字1很好,但重写staging.domain.com到www.domain.com/staging等等。
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L] RewriteRule ^$ /index.html RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\..+$ RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://www.domain.com/$1/ [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^/live/ RewriteRule ^(.*)$ /live/$1
我调整了我原来的代码的逻辑,似乎有一个可行的工作解决scheme。 我所做的每一个testing都是成功的,如果任何人看到代码中的任何缺陷,或者如何优化以适应原始问题所提出的条件,请加以注意。我几乎没有处理重写的经验。 谢谢。
工作代码:
# REDIRECTS # # Add www in front of all URLs except subdomains # RewriteCond %{HTTP_HOST} ^domain\.com$ RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L] RewriteRule ^$ /index.html # # Add forward slash at end of www URLs # RewriteBase / RewriteCond %{HTTP_HOST} ^www\.domain\.com$ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\..+$ RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://www.domain.com/$1/ [R=301,L] # # Forward requests to live folder # RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^/live/ RewriteRule ^(.*)$ /live/$1
*注意:我不确定为什么代码的最后一部分不会将子域名URLredirect到活动文件夹。 它以我想要的方式工作,只是不知道为什么^ _ ^;