开发者

simple subdomain set up for local development (htaccess?)

开发者 https://www.devze.com 2023-02-04 23:19 出处:网络
I am trying to set up a website, domain examplesproject.co.uk with a subdomain which is for the moment called

I am trying to set up a website, domain

examplesproject.co.uk

with a subdomain which is for the moment called

sub.examplesproject.co.uk .

I am with Bluehost and so I have set up the subdomain and I have got the same document root both for examplesproject.co.uk and sub.examplesproject.co.uk but I want content for

sub.examplesproject.co.uk

to actually be located at

examplesproject.co.uk/sub .

So why didn't I set 开发者_Go百科up the document root at examplesproject.co.uk/sub for the sub-domain? Because then, in local development I would need to treat the two domains as completely separate and that would mean no relative urls which seemed silly given that the subdomain folder is just tantalisingly inside the main domain.

However, if someone browsed to sub.examplesproject.co.uk they would get the same content as examplesproject.co.uk, which I don't want, so I set up htaccess rewrite in the root folder like so:

#rewite sub-domain to sub directory
RewriteCond %{HTTP_HOST}   ^[www\.]*sub.examplesproject.co.uk [NC]
RewriteCond %{REQUEST_URI} !^/sub/.*
RewriteRule   ^(.*)  /sub/$1  [L]

That works, however if you browse to examplesproject.co.uk/sub you can still see the content and I don't want to have two locations for the same content. However if I rewrite this sub-directory to show the sub-domain in the browser address, then I create a loop where it keeps feeding round.

As another side-point, I want my main site to be forced to use www, so I also have the following in my root htaccess..

#force add www on main domain
RewriteCond %{HTTP_HOST} ^examplesproject.co.uk$
RewriteRule ^(.*)$ http://www.examplesproject.co.uk$1 [R=301,L]

However, I want to force the sub domain not to have a www infront i.e. http://sub.examplesproject.co.uk and NOT http://www.sub.examplesproject.co.uk. To do this I am trying the following but it doesn't seem to work for other directories within the sub-domain (if that makes sense). Anyhows this is the code which I put in the sub directory (ie at examplesproject.co.uk/sub):

#force remove www on sub-domain
RewriteCond %{HTTP_HOST} ^www.sub.examplesproject.co.uk [NC]
RewriteRule ^(.*)$ http://sub.examplesproject.co.uk/$1 [L,R=301]

Thought I'd mention in case it affects things.

So, my question is, how do I achieve a nice set-up where:

  1. I can use relative URLs for developing and implementing my subdomain.
  2. browsing to http://sub.examplesproject.co.uk shows the content of http://www.examplesproject.co.uk/sub
  3. browsing to http://www.examplesproject.co.uk/sub doesn't duplicate the sub-domain by showing the content (for SEO purposes)

and also

  1. Main domain examplesproject.co.uk is forced to use www - http://www.examplesproject.co.uk.
  2. Sub domain sub.examplesproject.co.uk is force NOT to use www - http://sub.examplesproject.co.uk.

If anyone can help, I would be really grateful. By the way, locally I have set up virtual hosts http://examplesproject and http://sub.examplesproject using wamp and hosts file to replicate the online behaviour.

Thanks alot for reading. Answers/suggestions welcome.


Sorry about that Tim Post! I have put the content in this time! Nice one for looking at this. Hope that this helps someone.

This is the solution that worked for me (thanks to Jim (jdMorgan) at webmasterworld for this - http://www.webmasterworld.com/apache/4254301.htm)..

Put all of these rules, in this order, into the root .htaccess:

# Externally redirect direct client requests for test subdomain subdirectory paths to the test subdomain
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /sub/([^\ ]*)\ HTTP/
RewriteRule ^sub/(.*)$ http://sub.examplesproject\.co\.uk [R=301,L]
#
# Externally redirect all non-canonical, non-blank, non-test-subdomain hostname requests to canonical "www" main domain
RewriteCond %{HTTP_HOST} !^(www\.examplesproject\.co\.uk)?$
RewriteCond %{HTTP_HOST} !^([^.:]+\.)*sub\.([^.:]+\.)*examplesproject\.co\.uk [NC]
RewriteRule ^(.*)$ http://www.examplesproject.co.uk$1 [R=301,L]
#
# Externally redirect non-canonical subdomain hostname requests to canonical test subdomain
RewriteCond %{HTTP_HOST} ^([^.:]+\.)*sub\.([^.:]+\.)*examplesproject\.co\.uk [NC]
RewriteCond %{HTTP_HOST} !^sub\.examplesproject\.co\.uk$
RewriteRule ^(.*)$ http://sub.examplesproject.co.uk/$1 [R=301,L]
#
# Internally rewrite sub-domain requests to subdirectory path
RewriteCond %{HTTP_HOST} ^sub\.examplesproject\.co\.uk$
RewriteCond $1 !^sub/
RewriteRule ^(.*)$ /sub/$1 [L]

Checking THE_REQUEST in the now-first rule prevents the infinite redirection loop problem you encountered.

Note that exact hostnames are now enforced due to the very-careful use of case-sensitivity and anchoring.

Nice one aiit!

0

精彩评论

暂无评论...
验证码 换一张
取 消