stefanR: .htaccess

Guten Abend, ich habe folgende Rewrite-Rule für meinen Server definiert:

Options +FollowSymLinks
RewriteEngine on
RewriteRule http://example.org/$ /index.php?p=$1

Es soll also example.org/test/ eingegeben werden als URL und intern aufgerufen werden: example.org/index.php?p=test

Dies funktioniert aber nicht, bekomme jedes Mal einen "Internal Server Error".

Woran liegt das?
Wie muss die htaccess richtig heißen?

Gruß

  1. @@stefanR:

    nuqneH

    RewriteEngine on
    RewriteRule http://example.org/$ /index.php?p=$1
    […]
    Dies funktioniert aber nicht […] Woran liegt das?

    $1 bezieht sich auf den ersten http://de.selfhtml.org/perl/sprache/regexpr.htm#merken@title=geklammerten Teilausdruck; einen solchen gibt es bei dir aber nicht.

    Wie muss die htaccess richtig heißen?

    Besser nicht RewriteRule, sondern [link:http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirectmatch@title=RedirectMatch] verwenden.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. Besser nicht RewriteRule, sondern [link:http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirectmatch@title=RedirectMatch] verwenden.

      Wenn es nur um Pfade geht, ist das kein schlechter Rat - oft hat man aber verschiedene Umschreibregeln um z.B. alte Links auf neue Umzubieten. Da ist es dann oft schwerer zu lesen, wenn man mod_alias und mod_rewrite mischt - was mit mod_alias eben nicht geht, ist auf den Query-String zu reagieren.

  2. Guten Abend, ich habe folgende Rewrite-Rule für meinen Server definiert:

    Options +FollowSymLinks
    RewriteEngine on
    RewriteRule http://example.org/$ /index.php?p=$1

    Es soll also example.org/test/ eingegeben werden als URL und intern aufgerufen werden: example.org/index.php?p=test

    Dies funktioniert aber nicht, bekomme jedes Mal einen "Internal Server Error".

    Woran liegt das?
    Wie muss die htaccess richtig heißen?

    Gruß

    RewriteRule http://example.org/(.+)/$ /index.php?p=$1

    oder

    RewriteRule http://example.org/([a-zA-Z]+)/$ /index.php?p=$1

    usw.. je nachdem ob du bestimmte Zeichen ausschließend willst.

    Du kannst auch in deiner Webseite <base tag angeben zb
    <base href="http://example.org/" />

    und dann

    RewriteRule ^(.+)$ /index.php?p=$1

    so in die Richtung

    1. RewriteRule http://example.org/(.+)/$ /index.php?p=$1

      Das Pattern-Argument beeinhaltet nur den Pfad - das wird nicht funktionieren.

      RewriteRule http://example.org/([a-zA-Z]+)/$ /index.php?p=$1

      Siehe oben.

      Du kannst auch in deiner Webseite <base tag angeben zb
      <base href="http://example.org/" />

      mod_rewrite interessiert sich nur für HTTP-Requests und nicht was irgendwie im HTML (oder sonstigen Ressourcen) steht

      und dann

      RewriteRule ^(.+)$ /index.php?p=$1

      Schon eher - aber wo zu Anfang und Ende kennzeichnen, den Ausdruck speichern und dann anhängen wenns doch dein .* oder .+ und dann $0 auch tut?

      so in die Richtung