Issue with subdomains and htaccess for SEO

2019-09-07 17:09发布

问题:

I would like to change urls from:
http://subdomain.domain.com/page/ to http://subdomain.domain.com/?page=pagename
and also:
http://domain.com/page/ to http://domain.com/?page=pagename
though haven't had much success.

Here is my htaccess file so far [updated]

Options +FollowSymlinks -MultiViews

RewriteEngine On
RewriteBase /

# Remove 'www'
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

# Add slashes
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !index.php
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://resolutiongaming.com/$1/ [L,R=301]

# Subdomain redirect
RewriteRule ^/(webdev)/(.*)$ http://webdev.resolutiongaming.com/$1 [R=301,L]
RewriteRule ^/(artwork)/(.*)$ http://artwork.resolutiongaming.com/$1 [R=301,L]
RewriteRule ^/(music)/(.*)$ http://music.resolutiongaming.com/$1 [R=301,L]

# Search engine optimization
RewriteRule ([a-zA-Z]+)/$ ?page=$1

I used RewriteRule ^([a-zA-Z]+)/$ ?page=$1 which seemed to work for the domain url but not the subdomain. Any help would be appreciated.

回答1:

Actually had to do something like this recently. Try this for your Subdomain redirect block:

  RewriteRule ^/(webdev)/(.*)$ http://webdev.resolutiongaming.com/$2 [R=301,L]
  RewriteRule ^/(artwork)/(.*)$ http://artwork.resolutiongaming.com/$2 [R=301,L]
  RewriteRule ^/(music)/(.*)$ http://music.resolutiongaming.com/$2 [R=301,L]

Or maybe this; note the change from $2 to $1:

  RewriteRule ^/(webdev)/(.*)$ http://webdev.resolutiongaming.com/$1 [R=301,L]
  RewriteRule ^/(artwork)/(.*)$ http://artwork.resolutiongaming.com/$1 [R=301,L]
  RewriteRule ^/(music)/(.*)$ http://music.resolutiongaming.com/$1 [R=301,L]

EDIT: Or Maybe try this. Note that you need to capture two parts of the URL to rewrite as you are explaining. Each item in parenthesis ( and ) corresponds to a string in the rewrite. Try this. Using your nicer regular expression RewriteRule as you mention in the comments:

  RewriteRule ^([a-zA-Z]+)/(.*)$ /$1/$2 [R=301,L]

Or maybe this:

  RewriteRule ^([a-zA-Z]+)/(.*)$ /$1/page=$2 [R=301,L]


回答2:

So it was an easy fix really. I basically put a .htaccess file in each subdomain directory that looks like this:

Options +FollowSymlinks -MultiViews

RewriteEngine On
RewriteBase /

# Search engine optimization
RewriteRule ([a-zA-Z]+)/$ ?page=$1

Hope this helps someone. :D