Moved website to a subfolder, need to get the rewrites working

Hi Sitepointers,

I have moved a website from www.domain.com to www.domain.com/subfolder

I need to get the url rewrites working

Previously my .htaccess file looked like

RewriteEngine on
RewriteBase /
RewriteRule ^/?account$ /index.php?get_action=account [L]

I thought it would be just a simple case of adding the subfolder name to the RewriteBase …
RewriteEngine on
RewriteBase /subfolder/
RewriteRule ^/?account$ /index.php?get_action=account [L]

However that doesn’t work.

Any ideas?

tm,

The FIRST thing to learn about mod_rewrite is when NOT to use it. Since mod_alias handles your specific task very nicely, that’s what I’d use:

Redirect 301 / /subfolder/

Since that looks like it would be “loopy,” you could fall back on mod_rewrite:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^subfolder/
RewriteRule .? subfolder%{REQUEST_URI} [R=301,L]

There’s just too much wrong with your attempt to cover … and I’ve addressed exactly those issues many times in many threads. Therefore, you might benefit from reading the mod_rewrite tutorial linked in my signature as it contains explanations and sample code. It’s helped may members and should help you, too

Of course, the REAL answer is simply to move the contents of subfolder into the DocumentRoot and delete the subfolder. Alternatively, simply redefine your DocumentRoot to the location of the subfolder.

Regards,

DK

David,

With respect …this isn’t very helpful and is close to being arrogant, or is that Kiwi humour?

“There’s just too much wrong with your attempt to cover … and I’ve addressed exactly those issues many times in many threads”

I tried searching google before posting and couldn’t find what I needed. I have looked through some of your posts your and can’t find what I’m looking for.

your “Redirect 301 / /subfolder/” doesn’t solve because there is an active website in the main folder.

I would like to know what I have to put in .htaccess held in the sub folder to redirect a user visiting

www.domain.com/subfolder/account

to

www.domain.com/subfolder/index.php?get_action=account

I thought it would just be a question of stating what to use as the base, however it’s not that simple.

“Of course, the REAL answer is simply to move the contents of subfolder into the DocumentRoot and delete the subfolder. Alternatively, simply redefine your DocumentRoot to the location of the subfolder.”

Again I can’t do that, because the current website is there.

Hi tangledman,

Do you need both the [noparse]www.domain.com to www.domain.com/subfolder[/noparse] sites to work at the same time? If not why not change the default location of your virtual host file then when apache makes a request to that site it will use your files and run the .htaccess file you have in the sub folder.

Hello. You should be able to simply say this if the subfolder is the same for all files…

redirect 301 / http://www.domain.com/subfolder/

Hello all,

@serverstorm

“Do you need both the www.domain.com to www.domain.com/subfolder sites to work at the same time?” - Yes.

I have the current website running in root

I have the new website running in the subfolder

This is what I have in the .htaccess in the subfolder

RewriteEngine on
RewriteBase /
RewriteRule ^/?account$ /index.php?get_action=account [L]
RewriteRule ^/?advert$ /index.php?get_action=advert [L]
RewriteRule ^/?affiliates$ /index.php?get_action=affiliates [L]
RewriteRule ^/?agent$ /index.php?get_action=agent [L]
RewriteRule ^/?agent_admin$ /index.php?get_action=agent_admin [L]

I want it so the when I visit www.domain.com/subfolder/advert it gets re directed to www.domain.com/subfolder/index.php?get_action=agent_admin

This is what I have in the .htaccess in the root.

#
# Apache/PHP/Drupal settings:
#

# Protect files and directories from prying eyes.
<FilesMatch "\\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\\.php)?|xtmpl|svn-base)$|^(code-style\\.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format)$">
  Order allow,deny
</FilesMatch>

# Don't show directory listings for URLs which map to a directory.
Options -Indexes

# Follow symbolic links in this directory.
Options +FollowSymLinks

# Make Drupal handle any 404 errors.
ErrorDocument 404 /index.php

# Force simple error message for requests for non-existent favicon.ico.
<Files favicon.ico>
  # There is no end quote below, for compatibility with Apache 1.3.
  ErrorDocument 404 "The requested file favicon.ico was not found.
</Files>

# Set the default handler.
DirectoryIndex index.php

# Override PHP settings. More in sites/default/settings.php
# but the following cannot be changed at runtime.

# PHP 4, Apache 1.
<IfModule mod_php4.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>

# PHP 4, Apache 2.
<IfModule sapi_apache2.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
  # Enable expirations.
  ExpiresActive On

  # Cache all files for 2 weeks after access (A).
  ExpiresDefault A1209600

  <FilesMatch \\.php$>
    # Do not allow PHP scripts to be cached unless they explicitly send cache
    # headers themselves. Otherwise all scripts would have to overwrite the
    # headers set by mod_expires if they want another caching behavior. This may
    # fail if an error occurs early in the bootstrap process, and it may cause
    # problems if a non-Drupal PHP file is installed in a subdirectory.
    ExpiresActive Off
  </FilesMatch>
</IfModule>

# Various rewrite rules.
<IfModule mod_rewrite.c>
  RewriteEngine on

  # If your site can be accessed both with and without the 'www.' prefix, you
  # can use one of the following settings to redirect users to your preferred
  # URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
  #
  # To redirect all users to access the site WITH the 'www.' prefix,
  # (http://example.com/... will be redirected to http://www.example.com/...)
  # adapt and uncomment the following:
  # RewriteCond %{HTTP_HOST} ^example\\.com$ [NC]
  # RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
  #
  # To redirect all users to access the site WITHOUT the 'www.' prefix,
  # (http://www.example.com/... will be redirected to http://example.com/...)
  # uncomment and adapt the following:
  # RewriteCond %{HTTP_HOST} ^www\\.example\\.com$ [NC]
  # RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

  # Modify the RewriteBase if you are using Drupal in a subdirectory or in a
  # VirtualDocumentRoot and the rewrite rules are not working properly.
  # For example if your site is at http://example.com/drupal uncomment and
  # modify the following line:
  # RewriteBase /drupal
  #
  # If your site is running in a VirtualDocumentRoot at http://example.com/,
  # uncomment the following line:
  # RewriteBase /

  # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

# $Id: .htaccess,v 1.90.2.5 2010/02/02 07:25:22 dries Exp $

I thought I’d got this working by adding this to the .htaccess file in the root directory.

RewriteEngine On
RewriteRule ^/?account$ /subfolder/index.php?get_action=account [L]
RewriteRule ^/?advert$ /subfolder/index.php?get_action=advert [L]
RewriteRule ^/?affiliates$ /subfolder/index.php?get_action=affiliates [L]
RewriteRule ^/?agent$ /subfolder/index.php?get_action=agent [L]
etc…

however now every time I visit a link in the subfolder, the page opens in a new tab.

Help me or send booze, please.

tm,

No booze required as that looks fine (except the /? after the start anchor - Apache 1.x “in the wild” is rare and Apache 2.x does not need the leading / and you should know which version of the server you’re using). As for the leading / in the redirection, they are not required when you’re redirecting from the DocumentRoot and will only make Apache look to the server’s root directory first but that will only cause a miniscule delay in serving your subfolder/index.php script.

Pages opening in a new tab are usually directed to do so by the link (e.g., target=_blank). Moreover, mod_rewrite can’t open a new browser window or tab so this problem is within your script’s code.

Regards,

DK