Zur Navigation

301 Redirect auf dem Server direct

Statt in die .htaccess Datei zu schreiben

1 mirkz

Hi Com, Hi Jörg

Letzte Woche hab ich bei einem Vortrag über die Web Performance Optimierung aufgeschnappt das es besser ist für die Performance wenn 301 Redirects direct auf dem Server statt über die .htaccess Datei ausgeführt werden...

Ich wollte das mal probieren und müsste feststellen das ich keine Ahnung habe wo die Rein sollten.

Mein Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny8 with Suhosin-Patch mod_perl/2.0.4 Perl/v5.10.0

Was mich noch interessiert ist, ob der folgende Code aus der htaccess auch irgendwo direkt auf dem Server reingeschrieben werden kann

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/gif "access plus 30 days"
    ExpiresByType image/jpeg "access plus 30 days"
    ExpiresByType image/jpg "access plus 30 days"
    ExpiresByType image/png "access plus 30 days"
    ExpiresByType image/ico "access plus 30 days"
    ExpiresByType image/x-icon "access plus 30 days"
    ExpiresByType text/css "access plus 30 days"
    ExpiresByType text/javascript "access plus 30 days"
    ExpiresByType text/x-js "access plus 30 days"
    ExpiresByType application/javascript "access plus 30 days"
    ExpiresByType application/x-javascript "access plus 30 days"
</IfModule>
<IfModule mod_rewrite.c>
        RewriteEngine On

        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*\.(js|css))$ smartoptimizer/?$1

        <IfModule mod_expires.c>
                RewriteCond %{REQUEST_FILENAME} -f
                RewriteRule ^(.*\.(js|css|html?|xml|txt))$ smartoptimizer/?$1
        </IfModule>

        <IfModule !mod_expires.c>
                RewriteCond %{REQUEST_FILENAME} -f
                RewriteRule ^(.*\.(gif|jpg|jpeg|png|swf|css|js|html?|xml|txt))$ smartoptimizer/?$1
        </IfModule>
</IfModule>
<FilesMatch "\.(gif|jpg|jpeg|png|swf|css|js|html?|xml|txt)$">
        FileETag none
</FilesMatch>

Gruss Mirkz

16.10.2010 14:52

2 Jörg Kruse

Ja, diese Direktiven sollten auch alle in eine Config-Datei geschrieben werden können - der passende Ort wäre die Config-Datei des betreffenden Hosts. Diese befinden sich bei Debian im Verzeichnis /etc/apache2/sites-available. Änderungen müssen dem Server noch durch ein Reload bekannt gemacht werden

Hinsichtlich mod_rewrite ist noch zu beachten, dass die RewriteRule-Muster außerhalb der htaccess Dateien mit einem Slash beginnen. Die in deinem Code aufgeführten Rules muss man allerdings nicht anpassen, da ".*" ja auch einen Slash beinhaltet

16.10.2010 16:07 | geändert: 16.10.2010 16:11

3 mirkz

Danke!

Hab noch ein paar Fragen jetzt :)

1. Habe irgendwie Probleme mit dem Code oben... die CSS Definition verschwindet :? Hast du eine Idee warum das passiert und wie man es beheben kann?

2. Hab jetzt noch folgenden Code drin:

ErrorDocument 400 http://www.meinedomain.de/
ErrorDocument 401 /
ErrorDocument 403 http://www.meinedomain.de/
ErrorDocument 404 http://www.meinedomain.de/404.php
ErrorDocument 500 http://www.meinedomain.de/
RewriteEngine on
RewriteCond %{HTTP_HOST} ^meinedomain\.de [nc]
RewriteRule (.*) http://www.meinedomain.de/$1 [R=301,L]

Hier ist mir jetzt aufgefallen wenn ich die Domain ohne www eingebe wird es richtig umgeleitet auf www.meinedomain.de aber es sind zwei Schrägstriche am Schluss. So http://www.meinedomain.de// Hast du eine Idee wieso das so ist und wie man es anpassen kann das nur ein Strich kommt am schluss?

3. Hoffe das ich dich richtig verstanden habe:

Hinsichtlich mod_rewrite ist noch zu beachten, dass die RewriteRule-Muster außerhalb der htaccess Dateien mit einem Slash beginnen.

Beispiel .htaccess:
RewriteRule ^wissenswertes.html$ index.php?wissenswertes

Beispiel host.config
RewriteRule ^wissenswertes.html$ /index.php?wissenswertes

Richtig so?

5. Wie richte ich einen redirect von index.php auf www.meinedomain.de/ ohne das es für ander seiten die mit index.php beginnen zu änderungen kommt?

Konkret will ich www.meinedomain.de/index.php auf www.meinedomain.de umleiten aber www.meinedomain.de/index.php?page=3 soll ao bleiben und nicht ins www.meinedomain.de/?page=3 umgeschrieben werden.



16.10.2010 17:25

4 Jörg Kruse

1. Habe irgendwie Probleme mit dem Code oben... die CSS Definition verschwindet :? Hast du eine Idee warum das passiert und wie man es beheben kann?

Meine Aussage, dass die Slashes hier nicht notwendig sind, muss ich wohl zurückziehen. Probier's mal so:

RewriteRule ^/(.*\.(js|css))$ /smartoptimizer/?$1

Hier ist mir jetzt aufgefallen wenn ich die Domain ohne www eingebe wird es richtig umgeleitet auf www.meinedomain.de aber es sind zwei Schrägstriche am Schluss. So http://www.meinedomain.de// Hast du eine Idee wieso das so ist und wie man es anpassen kann das nur ein Strich kommt am schluss?

Da muss auch noch ein Slash vor, dann wird dieser nicht mit im geklammerten Ausdruck aufgenommen und rechts wiedergegeben:

RewriteCond %{HTTP_HOST} ^meinedomain\.de [nc]
RewriteRule /(.*) http://www.meinedomain.de/$1 [R=301,L]

Und hier auch auf der linken Seite:

RewriteRule ^/wissenswertes\.html$ /index.php?wissenswertes

5. Wie richte ich einen redirect von index.php auf www.meinedomain.de/ ohne das es für ander seiten die mit index.php beginnen zu änderungen kommt?

Das kannst du im Prinzip so machen wie auf dieser Seite beschrieben:

https://jkip.de/howtos/kanonische-url

... nur halt hier auch wieder mit beginnendem Slash

16.10.2010 18:15

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]