Load new site from subdirectory as index - .htaccess

I want to load my new website from subdirectory including default index.html page.
In my public_html, I have /oldsite/ and /newsite/ folders...
Then.. When I access to http://www.mysite.com/.. i want it to load all contents from http://www.mysite.com/newsite/ without redirecting. I want to do it with .htaccess mod_rewrite if possible..
Can anybody help me out with this. How to do this?

# to ensure that server already know that you going to use mod-rewrite
RewriteEngine on
# if the request from http is mysite.com or www.mysite.com go to next line (else abort)
RewriteCond %{HTTP_HOST} ^(www.)?mysite.com$ [NC]
# if the request destination is not the folder /newsite go to next line
RewriteCond %{REQUEST_URI} !^/newsite/
# if the requested name is not an existed file in public_html directory
RewriteCond %{REQUEST_FILENAME} !-f
# if the requested name is not an existed directory in public_html directory
RewriteCond %{REQUEST_FILENAME} !-d
# forward request to /newsite/
RewriteRule ^(.*)$ /newsite/$1
# if the request domain is mysite.com (with out any string afterward), go to next line
RewriteCond %{HTTP_HOST} ^(www.)?mysite.com$ [NC]
# forward request to the default file under newsite directory
RewriteRule ^(/)?$ newsite/ [L]

It is generally not a good idea to deploy a website like this. Instead you should create virtual hosts for the live and development versions of your site. If you can't do that with your current hosting provider you can make use of symlink for public_html and when the new version is ready to go live just change its path. Hope that helps.

Related

Redirect to old images folder, from new "root" folder

STATUS
The client has a site visible at client-domain.com, inside the root there is an .htaccess
RewriteEngine on
RewriteCond %{REQUEST_URI} !v2/.*
RewriteRule ^(.*)$ v2/$1 [L]
...and some folders:
v0 (with a page for temporary shoutdown the server)
v1 first version
v2 actual version of website
GOAL
Create a new website on v3, but keeping some asssets of version v2
(there is a big folder with subfolders in client-domain.com/assets/prjimg/ that obviously pointing at root/v2/assets/prjimg.
I can't move the folder, I don't have ssh access... I'd like to add a line to the new .htaccess without create a mess for pointing on v3 the website but v2 all the link at that subfolder 'prjimg')
All website --> root/v3/
but /assets/prjimg --> root/v2/asstes/prjimg
RewriteEngine on
RewriteCond %{REQUEST_URI} !v3/.*
*** something here? ***
RewriteRule ^(.*)$ v3/$1 [L]
I look for but doesn't find yet the solution, sometimes 500 eorr, sometimes loop...
Thanks
You may use these rules in site root .htaccess:
RewriteEngine on
# /assets/prjimg/ goes to /v2/
RewriteRule ^assets/prjimg(/.*)?$ v2/$0 [L,NC]
# everything else goes to /v3/
RewriteRule !^(v2|v3)/ v3%{REQUEST_URI} [L,NC]

htaccess configuration directories for subdomains and root domain

My folders in my www directory as set up as follows:
www/forums
www/helpdesk
www/www
In the base www folder (not www/www), I have the following set up in my htaccess file to redirect based on subdirectory
# Direct subdomains to appropriate folder in WWW directory
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
I also have the following set up for configuring the index.php on the main site (www.example.com) - this is also in the htaccess file in the www directory:
# Rewrite rules
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ www/$1 [L,QSA]
The problem I am facing is that I have stuff from forums.example.com that I want to embed in www.example.com (Vanilla Forums + WordPress plugin) - if I configure this using the admin panels, the iFrame gets blocked because they are different domains.
I found out that when I go to www.example.com/forums, I get the same front page as forums.examples.com - but all the clean URLs break.
When I look at the .htaccess file in the www/forums folder, I see the following configuration
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php\?p=$1 [QSA,L]
What do I need to do to the .htaccess file in the www directory so that when I go to www.example.com/forums, it works the same as if I went to forums.example.com
...the following set up in my htaccess file to redirect based on subdirectory
# Direct subdomains to appropriate folder in WWW directory
Aside: That snippet is just a canonical non-www to www redirect. It doesn't "redirect based on subdirectory" nor does it "direct [any] subdomains". (?)
the iFrame gets blocked because they are different domains.
It sounds as if you need to set an Access-Control-Allow-Origin HTTP response header on forums.example.com to allow the content to be "embedded" in example.com? Something like the following (using mod_headers) in the www/forums/.htaccess file:
Header set Access-Control-Allow-Origin "http://example.com"
What do I need to do to the .htaccess file in the www directory so that when I go to www.example.com/forums, it works the same as if I went to forums.example.com.
How do "all the clean URLs break"? However, given the HTTP header mentioned above, you shouldn't have to do anything more and still access forums.example.com (not the subdirectory).
Incidentally, the fact you can access the subdirectory (that the subdomain points to) is just how your hosting is configured. Normally you should block access to the subdirectory in order to prevent duplicate content issues (and any other issues, such as the linking problem you mention).
Also note, that due to the way mod_rewrite directives are inherited (or not in this case). The mod_rewrite directives in the www/forums/.htaccess file completely override the mod_rewrite directives in the parent folder.

Telling ftpsync to ignore directories in public_html

In ftpsync, when I try to update my site example.com, I find ftpsync deletes everything in public_html (where example.com resides). My host specifies that other domains reside as subdirectories in public_html.
Even though I have tried telling ftpsync to ignore public_html/subdir-example1.com and the code shown below it gets removed every time I try an update.
{
"local":"public/",
"remote":"public_html/",
"host":"example.com",
"port":21,
"user":"secret",
"pass":"secret",
"connections":"1",
"ignore":[
".htaccess",
"subdir-example1.com/",
"subdir-example2.com/"
]
}
So how do I tell ftpsync to ignore a directory on the host?
ftpsync says it basically nukes the entire directory on the other server. So the workaround is to create a subdirectory in public_html, then change the remote in config.json to be public_html/subdirectory/maindomain.com
Then change .htaccess following instructions written by BlueHost:
# BlueHost.com
# .htaccess main domain to subdirectory redirect
# Do not change this line.
RewriteEngine on
# Change example.com to be your main domain.
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
# Change 'subdirectory' to be the directory you will use for your main domain.
RewriteCond %{REQUEST_URI} !^/subdirectory/
# Don't change the following two lines.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Change 'subdirectory' to be the directory you will use for your main domain.
RewriteRule ^(.*)$ /subdirectory/$1
# Change example.com to be your main domain again.
# Change 'subdirectory' to be the directory you will use for your main domain
# followed by / then the main file for your site, index.php, index.html, etc.
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ subdirectory/index.html [L]
https://my.bluehost.com/cgi/help/347#redirect

.htaccess rewrite and subdomains connected to subdirectories

I have installed wordpress to my public_html/ folder on my host. Now, I want to help my friend to get his own wp blog. I wanted to add a folder public_html/zoran/ where I wanted to install another wp and to add subdomain zoran.example.com to call that folder.
Problem is that .htaccess from public_html/ (my wp installation) is messing .htaccess inside public_html/zoran/ folder. I googled a lot, and figured out that this is impossible to have one .htaccess rules in root folder and other in subfolder (mod rewrite).
I cannot access my cPanel for couple of days now, and it will be unavailable for a few days, I recieved mail about that.
Now, I am at this point. I have moved my wp into public_html/www/ and I stored .htaccess file into public_html/ with following content:
# Rewriting conditions
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule (.*) http://www.example.com/ [R,L]
# Identify subdomain as %1
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com
# Check if %1 is directory
RewriteCond %1 !-d
# rewrite the request to the subdomain's subfolder
RewriteRule (.*) %1/$1 [L]
Above code redirects example.com to www.example.com, and also, it opens my wp, stored in public_html/www/. But, when I try to go to zoran.example.com, I get 500 error, and that folder has just index.html file in it.
What is happening? How come that www folder works, and folder zoran does not work on same principle?!

What should I write in .htaccess file to rewrite this url?

I have a server parked on xyz.com. I have Wordpress installed on xyz.com/ and xyz.com/blog. I have created a new directory xyz.com/mamba.
In xyz.com/mamba. I want what that if user visits xyz.com/mamba/hello then the url should be rewritten to xyz.com/mamba/index.php?message=hello.
What should I write in .htaccess file in xyz.com/mamba/ directory?
Try:
RewriteEngine On
RewriteBase /mamba/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?message=$1 [L]
The first line turns on the rewrite engine for the /mamba/ directory. Without doing this, the rules won't get applied (and the rules in the parent directory gets applied instead). The RewriteBase tells the rules here that any relative URI in the target should have /mamba/ as a base URI. The 2 conditions say that the request must not point to an existing file or directory, and the rule rewrites the request and puts it in the message query string parameter for index.php.

Resources