简体   繁体   中英

Redirect one subdirectory to another subdomain

I'm trying to write a Rewrite that redirects a single subdirectory to a different subdomain on the same server. There are many questions on Stackoverflow that are similar, but I can't figure out how to combine them.

I've tried it with a simple redirect, but that, of course ends up in a redirect loop:

Redirect 302 /subdirectory http://another-subdomain.test.de/subdirectory

I've tried a whole bunch of conditions and rules to no avail. Here's what my initial tests looked like, but none of its parts seem to work:

RewriteCond %{HTTP_HOST} ^subdomain\.test\.de$ [NC]
RewriteRule ^subdirectory(.*)$ http://another-subdomain.test.de/subdirectory/$1 [R=302,L]

In a gist, I need to redirect a single directory to another subdomain on the same server. How do I do that?

#####
#
# Example .htaccess file for TYPO3 CMS - for use with Apache Webserver
#
# This file includes settings for the following configuration options:
#
# - Compression via TYPO3
# - Settings for mod_rewrite (URL-Rewriting)
# - PHP optimisation
# - Miscellaneous
#
# If you want to use it, you have to copy it to the root folder of your TYPO3 installation (if its
# not there already) and rename it to '.htaccess'. To make .htaccess files work, you might need to
# adjust the 'AllowOverride' directive in your Apache configuration file.
#
# IMPORTANT: You may need to change this file depending on your TYPO3 installation!
#
# Lines starting with a # are treated as comment and ignored by the web server.
#
# You should change every occurance of TYPO3root/ to the location where you have your website in.
# For example:
# If you have your website located at http://example.com/
# then your TYPO3root/ is just empty (remove 'TYPO3root/')
# If you have your website located at http://example.com/some/path/
# then your TYPO3root/ is some/path/ (search and replace)
#
# You can also use this configuration in your httpd.conf, but then you have to modify some lines,
# see the comments (search for 'httpd.conf')
#
# Questions about this file go to the matching Install mailing list, see
# http://typo3.org/documentation/mailing-lists/
#
####


### Begin: Compression via TYPO3 ###

# Compressing resource files will save bandwidth and so improve loading speed especially for users
# with slower internet connections. TYPO3 can compress the .js and .css files for you.
# *) Uncomment the following lines and
# *) Set $TYPO3_CONF_VARS['BE']['compressionLevel'] = '9' for the Backend
# *) Set $TYPO3_CONF_VARS['FE']['compressionLevel'] = '9' together with the TypoScript properties
#    config.compressJs and config.compressCss for GZIP compression of Frontend JS and CSS files.

<FilesMatch "\.js\.gzip$">
    AddType "text/javascript" .gzip
</FilesMatch>
<FilesMatch "\.css\.gzip$">
    AddType "text/css" .gzip
</FilesMatch>
AddEncoding gzip .gzip

### End: Compression via TYPO3 ###


### Begin: Browser caching of ressource files ###

# Enable long browser caching for JavaScript and CSS files.

# This affects Frontend and Backend and increases performance.
# You can also add other file extensions (like gif, png, jpg), if you want them to be longer cached, too.

<FilesMatch "\.(js|css)$">
  <IfModule mod_expires.c>
    ExpiresActive on
    ExpiresDefault "access plus 7 days"
  </IfModule>
  FileETag MTime Size
</FilesMatch>

### End: Browser caching of ressource files ###


### Begin: Settings for mod_rewrite ###

# You need rewriting, if you use a URL-Rewriting extension (RealURL, CoolUri).

<IfModule mod_rewrite.c>

# Enable URL rewriting
RewriteEngine On

# Change this path, if your TYPO3 installation is located in a subdirectory of the website root.
RewriteBase /

# Rules to set ApplicationContext based on hostname
#RewriteCond %{HTTP_HOST} ^dev\.example\.com$
#RewriteRule (.*) $1 [E=TYPO3_CONTEXT:Development]
#RewriteCond %{HTTP_HOST} ^staging\.example\.com$
#RewriteRule (.*) $1 [E=TYPO3_CONTEXT:Production/Staging]
#RewriteCond %{HTTP_HOST} ^www\.example\.com$
#RewriteRule (.*) $1 [E=TYPO3_CONTEXT:Production]

# Rule for versioned static files, configured through:
# - $TYPO3_CONF_VARS['BE']['versionNumberInFilename']
# - $TYPO3_CONF_VARS['FE']['versionNumberInFilename']
# IMPORTANT: This rule has to be the very first RewriteCond in order to work!
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.(\d+)\.(php|js|css|png|jpg|gif|gzip)$ $1.$3 [L]

# Basic security checks
# - Restrict access to deleted files in Recycler directories
# - Restrict access to TypoScript files in default templates directories
# - Restrict access to Private extension directories
# For httpd.conf, use these lines instead of the next ones:
# RewriteRule ^/TYPO3root/fileadmin/(.*/)?_recycler_/ - [F]
# RewriteRule ^/TYPO3root/fileadmin/templates/.*(\.txt|\.ts)$ - [F]
# RewriteRule ^/TYPO3root/typo3conf/ext/[^/]+/Resources/Private/ - [F]
RewriteRule ^fileadmin/(.*/)?_recycler_/ - [F]
RewriteRule ^fileadmin/templates/.*(\.txt|\.ts)$ - [F]
RewriteRule ^typo3conf/ext/[^/]+/Resources/Private/ - [F]

# Stop rewrite processing, if we are in the typo3/ directory.
# For httpd.conf, use this line instead of the next one:
# RewriteRule ^/TYPO3root/(typo3/|fileadmin/|typo3conf/|typo3temp/|uploads/|favicon\.ico) - [L]
RewriteRule ^(typo3/|fileadmin/|typo3conf/|typo3temp/|uploads/|favicon\.ico) - [L]

# If the file/symlink/directory does not exist => Redirect to index.php.
# For httpd.conf, you need to prefix each '%{REQUEST_FILENAME}' with '%{DOCUMENT_ROOT}'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

# Main URL rewriting.
# For httpd.conf, use this line instead of the next one:
# RewriteRule .* /TYPO3root/index.php [L]
RewriteRule .* index.php [L]

</IfModule>

### End: Settings for mod_rewrite ###


### Begin: PHP optimisation ###

# If you do not change the following settings, the default values will be used.

# TYPO3 works fine with register_globals turned off.
# This is highly recommended, if your web server has it turned on.
##php_flag register_globals off

### End: PHP optimisation ###



### Begin: Miscellaneous ###

# Make sure that directory listings are disabled.
#Options -Indexes

### End: Miscellaneous ###


# Add your own rules here.
# ...

RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP_HOST} ^www\.jobzzone\.de$ [NC]
RewriteRule ^(.*)$ https://www.jobzzone.de/$1 [R=301,L]

RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP_HOST} ^bad-kreuznach\.jobzzone\.de$ [NC]
RewriteRule ^(.*)$ https://bad-kreuznach.jobzzone.de/$1 [R=301,L]

RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP_HOST} ^birkenfeld\.jobzzone\.de$ [NC]
RewriteRule ^(.*)$ https://birkenfeld.jobzzone.de/$1 [R=301,L]

RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP_HOST} ^mainz-bingen\.jobzzone\.de$ [NC]
RewriteRule ^(.*)$ https://mainz-bingen.jobzzone.de/$1 [R=301,L]

# Umleitung von alter www.jobzzone.de nach bad-kreuznach.jobzzone.de, aber nur für das /unternehmen Unterverzeichnis
#               funktioniert noch nicht!


<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.jobzzone\.de$ [NC]
RewriteRule ^jobzzone.dievorschau.de/unternehmen/(.*)$ http://jobzzone-badkreuznach.dievorschau.de/unternehmen/$1 [R=302,L]
RewriteRule ^jobzzone.dievorschau.de/unternehmen$      http://jobzzone-badkreuznach.dievorschau.de/unternehmen/   [R=302,L]
</IfModule>

EDIT

I've appended the following to the htaccess,

RewriteCond %{HTTP_HOST} "^jobzzone.dievorschau.de$"     [NC,OR]
RewriteCond %{HTTP_HOST} "^www.jobzzone.dievorschau.de$" [NC]
RewriteRule "^/unternehmen/(.*)$"    "http://jobzzone-badkreuznach.dievorschau.de/unternehmen/"    [R=302,L]

RewriteCond %{HTTP_HOST} "^jobzzone.dievorschau.de$"     [NC,OR]
RewriteCond %{HTTP_HOST} "^www.jobzzone.dievorschau.de$" [NC]
RewriteRule "^/unternehmen/(.*)$"    "http://jobzzone-badkreuznach.dievorschau.de/unternehmen/$1"  [R=302,L]

but the Redirect still doesn't work.

Redacted:~ redacted$ wget "http://jobzzone.dievorschau.de/unternehmen/arbeitsagentur" --server-response
-2018-10-04 09:07:57--  http://jobzzone.dievorschau.de/unternehmen/arbeitsagentur
Auflösen des Hostnamens jobzzone.dievorschau.de (jobzzone.dievorschau.de)… 2a03:2a00:1200:0:1::3795, 37.202.5.54
Verbindungsaufbau zu jobzzone.dievorschau.de (jobzzone.dievorschau.de)|2a03:2a00:1200:0:1::3795|:80 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 
 HTTP/1.1 301 TYPO3 RealURL redirect
 Date: Thu, 04 Oct 2018 07:07:58 GMT
 Server: Apache
 X-TYPO3-RealURL-Info: redirect for missing slash
 Connection: close
 Upgrade: h2,h2c
 Connection: Upgrade
 Content-length: 0
 Location: http://jobzzone.dievorschau.de/unternehmen/arbeitsagentur/
 Content-Type: text/html; charset=UTF-8
Platz: http://jobzzone.dievorschau.de/unternehmen/arbeitsagentur/ [folgend]
-2018-10-04 09:07:58--  http://jobzzone.dievorschau.de/unternehmen/arbeitsagentur/
erbindungsaufbau zu jobzzone.dievorschau.de (jobzzone.dievorschau.de)|2a03:2a00:1200:0:1::3795|:80 … verbunden.
TTP-Anforderung gesendet, auf Antwort wird gewartet … 
 HTTP/1.1 404 Not Found
 Date: Thu, 04 Oct 2018 07:07:58 GMT
 Server: Apache
 Upgrade: h2,h2c
 Connection: Upgrade, Keep-Alive
 Keep-Alive: timeout=5, max=100
 Transfer-Encoding: chunked
 Content-Type: text/html; charset=UTF-8
2018-10-04 09:07:58 FEHLER 404: Not Found.

Theres RealUrl installed in the TYPO3 installation, and that appends the missing slash and redirects, but the htaccess Redirect does nothing it seems...

Since you do not have access to modify the VirtualHost, you could do it like this in a .htaccess file:

RewriteEngine On

RewriteCond %{HTTP_HOST} "^test\.de$"     [NC,OR]
RewriteCond %{HTTP_HOST} "^www.test\.de$" [NC]
RewriteRule "^/subdirectory/(.*)$"    "http://subd.example.com/$1" [R=301,L]

RewriteCond %{HTTP_HOST} "^test\.de$" [NC,OR]
RewriteCond %{HTTP_HOST} "^www.test\.de$" [NC]
RewriteRule "^/subdirectory$"    "http://subd.example.com/"   [R=301,L]

This way, the redirections are only applied on domains test.de and www.test.de .

For these two (hence the option OR), if someone asks for /subdirectory/SOMETHING or /subdirectory it will redirect to the sub-domain.


Example based on my answer, following your comment

You want:

http://jobzzone.dievorschau.de/unternehmen/*
    redirected to
http://jobzzone-badkreuznach.dievorschau.de/unternehmen/(the value of *)

Example you provided:

http://jobzzone.dievorschau.de/unternehmen/beinbrech 
    needs to redirect to 
http://jobzzone-badkreuznach.dievorschau.de/unternehmen/beinbrech

The configuration becomes:

RewriteEngine On

RewriteCond %{HTTP_HOST} "^jobzzone.dievorschau.de$"     [NC,OR]
RewriteCond %{HTTP_HOST} "^www.jobzzone.dievorschau.de$" [NC]
RewriteRule "^/unternehmen/(.*)$"    "http://jobzzone-badkreuznach.dievorschau.de/unternehmen/"    [R=301,L]

RewriteCond %{HTTP_HOST} "^jobzzone.dievorschau.de$"     [NC,OR]
RewriteCond %{HTTP_HOST} "^www.jobzzone.dievorschau.de$" [NC]
RewriteRule "^/unternehmen/(.*)$"    "http://jobzzone-badkreuznach.dievorschau.de/unternehmen/$1"  [R=301,L]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM