it-swarm.com.de

Unterordner werden nicht permanent zur Unterdomäne umgeleitet

Im Moment habe ich den folgenden Code, um alle Nicht-WWW-URLs zu WWW-URLs umzuleiten:

RewriteCond %{HTTP_Host} ^example.com
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

Neben dieser Umleitung möchte ich auch alle Aufrufe von/dev/an dev.example.com umleiten. Ich habe verschiedene Ansätze ausprobiert, aber nichts hat funktioniert (die wenigen, die sich wie ReplaceMatch annähern, leiten nur zum Bit dev.example.com um und belassen den Rest als Abfragezeichenfolge).

Irgendwelche Ideen?

BEARBEITEN: Hier ist die vollständige .htaccess-Datei für den Stammordner (einige wurden aus Datenschutzgründen umgeschrieben):

ErrorDocument 404 /404.html
AddType application/x-httpd-php .json
AddType application/x-httpd-php .xml

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

# disables image hotlinking
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?example\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !google\. [NC] 
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteRule .*\.(jpe?g|gif|bmp|png)$ - [F]

# Stop htaccess rules from accessing these areas of the website.
RewriteRule ^(banner|boxart|cgi-bin|content|forums|includes|newsimages|newsimg|sidebar|union-files|google5e645385256c3a63.html) - [L]

# Redirects /page URLs to /page/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.[^./]+$
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) /$1/ [R=301,L]

# Redirect old URLs to their new URLs
RewriteRule ^reviews/badurl--43.html$ http://www.gamingunion.net/reviews/goodurl--43.html [R=301,NC]

# Redirect non-WWW to WWW
RewriteCond %{HTTP_Host} ^example.com
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
RedirectMatch 301 ^/dev/(.*)$ http://dev.example.com/$1

# URL Directory Redirects
RewriteRule ^([^/]*)/$ /index.php?p=$1&urltype=slash [L,QSA]
RewriteRule ^([^/]*)/$ /index.php?p=$1&urltype=slash [L,QSA]
RewriteRule ^([^/]*)/([^/]*)/$ /index.php?p=$1&lv1d=$2 [L,QSA]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/$ /index.php?p=$1&lv1d=$2&lv2d=$3 [L,QSA]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/$ /index.php?p=$1&lv1d=$2&lv2d=$3&lv3d=$4 [L,QSA]

# URL File Redirects
RewriteRule ^([^/]*)\.html$ /index.php?p=$1&urltype=dot [L,QSA]
RewriteRule ^([^/]*)/([^/]*)\.html$ /index.php?p=$1&lv1p=$2 [L,QSA]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ /index.php?p=$1&lv1d=$2&lv2p=$3 [L,QSA]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)\.html$ /index.php?p=$1&lv1d=$2&lv2d=$3&lv3p=$4 [L,QSA]

# For servers that support output compression, you should pick up a bit of speed but un-commenting the following lines.
php_flag zlib.output_compression On
php_value zlib.output_compression_level 5

Das in/dev/ist im Grunde dasselbe wie dieses, außer dass es oben ein Passwortschutzbit und einige Weiterleitungen für einige Image-Ordner hat, die sich nur im Stammverzeichnis des Servers befinden.

4
Shawn Collier

Sie haben also mehr als eine .htaccess-Datei: eine im Stammordner und eine im Ordner /dev.

Wo haben Sie die Regeln von @Alex - root oder/dev .htaccess abgelegt? Am wahrscheinlichsten in root. Das ist der Grund, warum es nicht geklappt hat.

Die Sache ist - wenn Apache Umschreiberegeln in Ordnern niedrigerer Ebene sieht, werden sie NICHT aus dem übergeordneten Ordner ausgeführt, es sei denn, Ihre untergeordnete Ebene hat RewriteOptions inherit -Zeile: http://httpd.Apache.org/ docs/current/mod/mod_rewrite.html # rewriteoptions

Nun haben Sie den folgenden Code in die .htaccess-Datei eingefügt:

RedirectMatch 301 ^/dev/(.*)$ http://dev.example.com/$1

Diese Anweisung gehört zu einem anderen Modul und wird trotzdem ausgeführt. Sie wird ausgeführt , nachdem mod_rewrite die URL bereits umgeschrieben hat. Deshalb sehen Sie nach der Umleitung echte URLs.

Die folgende Regel sollte funktionieren - fügen Sie sie einfach in Ihr /dev/.htaccess ein.

RewriteCond %{HTTP_Host} !^dev\.example\.com
RewriteCond %{REQUEST_URI} ^/dev/
RewriteRule ^(.*)$ http://dev.example.com/$1 [R=301,L,QSA]

Apache wird angewiesen, umzuleiten, wenn:

  • domain ist nicht dev.example.com
  • Die URL beginnt mit /dev/ (dies geschieht nur, wenn dies über die Hauptdomain angefordert wird)
7
LazyOne

Versuche dies:

RewriteCond %{HTTP_Host} ^(www\.)?example\.com$
RewriteRule ^dev/(.*) http://dev.example.com/$1 [R=301,L]
1
Alex

Ich habe den folgenden Redirect-Code verwendet, um Subdomains in einen URL-Parameter umzuschreiben:

# rewrite subdomain
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_Host} ^([^\.]+)\.example\.org$ [NC]
RewriteRule ^(.*)$ index.php?q=116&company_name=%1$1 [L,QSA,NC]

%1 ist die Regex-Übereinstimmung für die Unterdomäne; $1 besteht aus allen anderen URL-Parametern;

Spielen Sie damit herum, um zu einem Ordner umzuleiten, wie zum Beispiel:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_Host} ^([^\.]+)\.example\.org$ [NC]
RewriteRule ^(.*)$ /%1/$1 [L,QSA,NC]
0
feeela