Redirect Subdomain Using htaccess and Keep URL

风格不统一 提交于 2019-11-28 11:03:25

问题


I have searched and while I found lots of threads close, none were exactly what I am looking for...

On my site, say example.com, I've created the subdomain secure.example.com

This subdomain will have SSL.

What I want to do is redirect requests to https://secure.example.com/path/ to www.example.com/path/ while keeping the url showing as https://secure.example.com/path/

note that the purpose of subdomain.example.com is for SSL so the redirect above will need to work with SSL

I would like to use a few other redirects in the htaccess: 1) redirect non-www to www ignoring subdomains (so secure.example.com doesn't become www.secure.example.com) 2) redirect /index.php to / 3) and last but not least, force SSL on secure.example.com

In addition the shopping cart software has additional htaccess statements for functionality and SEO as seen below.

My current root htaccess:

# Prevent Directoy listing 
Options -Indexes

# Prevent Direct Access to files
<FilesMatch "\.(tpl|ini|log)">
 Order deny,allow
 Deny from all
</FilesMatch>

# Turn Rewrite Engine On
RewriteEngine On

## index.php to root
Options +FollowSymlinks
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.example.com/ [R=301,L] 

## non-www to www ignore subdomains
RewriteCond %{HTTP_HOST} ^example.com [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

回答1:


Well, specifically for the url https://secure.example.com/path/ to display content found at http://www.example.com/path/, there's 2 things that you can do. The best thing is if the 2 domains are served from the same document root:

they are on the same host and same document root. The subdomain is literally a subfolder under the root setup with a subdomain. With help from my host we now have it resolving properly and the SSL installed.

The subdirectory might be a problem, since it may not be able to rewrite out of its own document root. For example:

  • domain -> document root
  • www.example.com -> /path/to/htdocs
  • secure.example.com -> /path/to/htdocs/secure

If you had an .htaccess file in /path/to/htdocs/secure to rewrite requests for https://secure.example.com/. The problem here is you need to rewrite to the parent directory, and apache won't let you do that. If it was the other way around, you could rewrite requests for http://www.example.com/ to /secure. Also, if the two domains had the same document root, you could also rewrite. But not if secure is a subdirectory to www's document root.

My host says that mod_proxy is installed. My Apache config shows these are installed: proxy_module (static) proxy_connect_module (static) proxy_ftp_module (static) proxy_http_module (static) proxy_ajp_module (static) proxy_balancer_module (static)

That means you can at least use the P rewrite flag to send the request off to mod_proxy, so you can do something like this:

RewriteEngine On
RewriteRule ^path/$ http://www.example.com/path/ [L,P]

in the htaccess file in your secure.example.com's document root. That will only proxy specifically the URI /path/, and not anything like /path/foo/bar.html. If you want everything starting with /path/, then you can match against it:

RewriteRule ^path/(.*)$ http://www.example.com/path/$1 [L,P]

If there are redirection issues, you may want to resort to using ProxyPass instead:

ProxyPass / http://www.example.com/
ProxyPassReverse / http://www.example.com/

It does the same thing except it rewrites location headers so redirects also get proxied.



来源:https://stackoverflow.com/questions/11959853/redirect-subdomain-using-htaccess-and-keep-url

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!