Forum Moderators: phranque
widget-type1.example.com should forward to www.example.com/widgets/widgetpage.html
I have tried the following code in the .htaccess in the webroot:
RewriteEngine On
RewriteCond %{HTTP_HOST} widget-type1\.example\.com [NC]
RewriteRule (.*) http://www.example.com/widgets/widgetpage.html [L]
But it doesn't seem to work. I should state that I am quite new to mod_rewrite and apache in general. The server uses Plesk and has vhosts set up, so I have tried placing my code in a vhost.conf file but no luck.
There will be many subdomains, each redirecting to a different URL. I will probably have to write a rule for each subdomain since the URL they redirect to isn't always in the form of example.com/<subdomain>.html due to the way Magento works.
How did you test? What were the expected results? What were the actual results? How did the actual results differ from the expected results? Any error messages in the browser? Any relevant entries in the server error log? Did you completely flush (delete) your browser cache before testing?
Please be very, very specific, as otherwise it will take a long time and lots of posts to figure this out.
Jim
Magento includes a .htaccess file in the webroot full of settings for the store. Perhaps one of their rewrite is conflicting. Here is the .htaccess file with my example inserted where the real rewrite is (sorry its long):
############################################
## uncomment these lines for CGI mode
## make sure to specify the correct cgi php binary file name
## it might be /cgi-bin/php-cgi# Action php5-cgi /cgi-bin/php5-cgi
# AddHandler php5-cgi .php
############################################
## GoDaddy specific options
Options -MultiViews
## you might also need to add this line to php.ini
## cgi.fix_pathinfo = 1
## if it still doesn't work, rename php.ini to php5.ini
############################################
## this line is specific for 1and1 hosting
#AddType x-mapp-php5 .php
#AddHandler x-mapp-php5 .php
############################################
## default index file
DirectoryIndex index.php
<IfModule mod_php5.c>
############################################
## adjust memory limit
# php_value memory_limit 64M
php_value memory_limit 128M
php_value max_execution_time 18000
############################################
## disable magic quotes for php request vars
php_flag magic_quotes_gpc off
############################################
## disable automatic session start
## before autoload was initialized
php_flag session.auto_start off
############################################
## enable resulting html compression
#php_flag zlib.output_compression on
###########################################
# disable user agent verification to not break multiple image upload
php_flag suhosin.session.cryptua off
###########################################
# turn off compatibility with PHP4 when dealing with objects
php_flag zend.ze1_compatibility_mode Off
</IfModule>
<IfModule mod_security.c>
###########################################
# disable POST processing to not break multiple image upload
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
<IfModule mod_deflate.c>
############################################
## enable apache served files compression
## http://developer.yahoo.com/performance/rules.html#gzip
# Insert filter on all content
###SetOutputFilter DEFLATE
# Insert filter on selected content types only
#AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
# Netscape 4.x has some problems...
#BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
#BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
#BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
#SetEnvIfNoCase Request_URI \.(?:gif¦jpe?g¦png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
#Header append Vary User-Agent env=!dont-vary
</IfModule>
<IfModule mod_ssl.c>
############################################
## make HTTPS env vars available for CGI mode
SSLOptions StdEnvVars
</IfModule>
<IfModule mod_rewrite.c>
############################################
## enable rewrites
Options +FollowSymLinks
RewriteEngine on
############################################
## you can put here your magento root folder
## path relative to web root
#RewriteBase /magento/
############################################
## workaround for HTTP authorization
## in CGI environment
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
############################################
## Compress, Combine and Cache Javascript/CSS
RewriteRule ^(index.php/)?minify/([^/]+)(/.*.(js¦css))$ lib/minify/m.php?f=$3&d=$2
############################################
## always send 404 on missing files in these folders
RewriteCond %{REQUEST_URI} !^/(media¦skin¦js)/
############################################
## never rewrite for existing files, directories and links
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
############################################
## rewrite everything else to index.php
RewriteRule .* index.php [L]
############################################
## Subdomain Rewrites
RewriteCond %{HTTP_HOST} widget-type1\.example\.com [NC]
RewriteRule (.*) http://www.example.com/widgets/widgetpage.html [L]
</IfModule>
############################################
## Prevent character encoding issues from server overrides
## If you still have problems, use the second line instead
AddDefaultCharset Off
#AddDefaultCharset UTF-8
<IfModule mod_expires.c>
############################################
## Add default Expires header
## http://developer.yahoo.com/performance/rules.html#expires
ExpiresDefault "access plus 1 year"
</IfModule>
############################################
## By default allow all access
Order allow,deny
Allow from all
############################################
## If running in cluster environment, uncomment this
## http://developer.yahoo.com/performance/rules.html#etags
#FileETag none
If you do not have a unique IP address for your server, you may find *some* support in your control panel for multiple subdomains (a.k.a. "add-on domains") but this support is generally limited as to the number of (sub)domains supported, and their ability to 'share' files (e.g. your scripts) with the 'main' domain and with each other. In short, it usually won't work for what you're trying to do.
Jim
Also, it is likely that you do not need the check the "-l" flag in the "never rewrite for existing files, directories and links" section unless you use and rely on symbolic links (rare). Doing so will improve your server performance under heavy load -- and perhaps noticeably.
The "no web site at this address" message is quite confusing, since it appears that your rule redirects (not rewrites) to your main domain, and I would think that that domain surely exists... (!)
Jim
If I make a .htaccess file within the subdomains webroot, the code works. I guess I have to make a different folder for each subdomain and put a .htaccess in each one. I hoped to handle it through one .htaccess file without having to make physical folders for each subdomain but this is becoming difficult.
I'm pretty sure my problem is just the way Plesk handles apache and its configuration files. I will probably check with the Parallels forum. Thanks for your assistance Jim!
Jim
RewriteCond %{HTTP_HOST} !^widget-type1\.example\.com
RewriteCond %{REQUEST_URI} /widgets/widget-page\.html [NC]
RewriteRule (.*) [widget-type1.example.com...] [L]
This is what I have in <subdomain>/<subdirectory>
RewriteEngine On
RewriteCond %{THE_REQUEST} !^/widget-page\.html
RewriteCond %{HTTP_HOST} widget-type1\.example\.com [NC]
RewriteRule (.*) http://www.example.com/widgets/widget-page.html [L]
This is creating an infinite loop though.
It's obvious that the two rules 302-redirect to each other and so will loop, but without knowing what they're meant to accomplish, it's hard to tell how to fix them.
Also, if you've used a control panel to set up this subdomain, it won't likely be possible to 'rewrite back' to the main site, because the two sites are considered separate, and the subdomain likely cannot access any files above its 'root' (which is the subdirectory of your main site).
Note that I'm using the terms 'redirect' and 'rewrite' in a semi-formal manner here: An internal rewrite maps a URL to a filepath, while an external redirect maps a URL to a different URL.
Also, if you're going through all this to get a 'keyword-in-subdomain' ranking advantage, I wouldn't bother; There are far simpler and less time-consuming things you could do to get a bigger/better benefit, and with far less risk of being labeled 'spammy' by the search engines...
Jim