Meine index.php ändern

  • moin moin,

    und zwar habe ich gerade ein SEO-Seminar mitgemacht und muss was ändern. Ich habe eine index.php wo ich eine include oben.php, unten.php habe, und die rufe ich so als Link "?sy=info/kontakt" auf. Jetzt möchte ich ganz gerne das "?sy=" nicht mehr aufrufen sondern nur noch "info/kontakt". Ich erstelle immer eine index.html mit mein Design und teile Sie in oben, inhalt und unten, diese struktur möchte ich auch beibehalten. Ich poste mal mein index.php code, vtl. kann mir ja jemand helfen wäre echt super.

    :)

  • Was spricht gegen die Parameterübergabe und warum willst du das nicht?

    Und wenn

    PHP
    if ( empty ($sy) ) { $sy = 'startseite'; }


    bei dir funktioniert, dann hast du eine völlig veraltete PHP-Version bzw. -Konfiguration

  • ^^ möchte das einfach so haben, aus einen guten grund weil google kein "?" mark und ich mit GoogleAdwords etc... Werbung mache, habe gerade ein Seminar in SEO (Suchmaschinenoptimierung) absolviert, und möchte meine Webseite abändern. :lol::lol:

    Einmal editiert, zuletzt von FlinkerWiesel (6. Dezember 2011 um 17:09)

  • Da brauchst du an deiner index.php überhaupt nichts ändern, das machst du über Mod_Rewrite.
    Du erstellst dir in dem Verzeichnis in dem die index.php liegt eine Text-Datei .htaccess
    Dort schreibst du folgendes rein, bzw. falls du schon eine hast erweiterst du sie:


    Die erste Zeile meldet an, dass man Mod_Rewrite benutzen möchte.
    RewriteBase / setzt den relativen Pfad ab der tld, ab welchem Verzeichnis die Rewrite-Regeln genutzt werden.
    Wenn deine Url lautet: http://www.meinedomain.de
    Dann setzt du: RewriteBase /
    Wenn deine Url lautet: http://www.meinedomain.de/mein/unter/ordner
    Dann setzt du: Rewrite Base /mein/unter/ordner/

    RewriteRule !images/ - [C] <-- Das besagt, dass der Ordner images weiterhin als Ordner behandelt wird. Das muss für jeden Ordner gesetzt werden, aus welchem du auf deiner Webseite Dateien einbinden willst. Z.B. CSS-Dateine, JS-Dateien, Grafiken etc. Für jeden dieser Ordner muss diese Ausnahme in der .htaccess notiert werden.

    RewriteRule ^(.*)/(.*)$ index.php?sy=$1 <-- damit sagst, das alles was an deine Basis-Url gehängt wird in den Get-Parameter sy geschrieben wird. Wenn deine Basisurl lautet http://www.meinedomain.de und du rufst http://www.meinedomain.de/unterseite42 auf, dann steht in sy 'unterseite42'.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Ohne Mod_Rewrite kannst du das was du vorhast nicht über eine einzige Datei steuern.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Nochmal zu deiner PHP-Version: Wenn du bei einem Hoster bist, der diese alte Version/Konfiguration anbietet, dann solltest du schnellstens den Hoster wechseln oder ihn dazu auffordern, seine Server mal zu aktualisieren. Wenn es sich um eine lokale Entwicklungsumgebung handelt, dann solltest du schnellstens aktualisieren.

  • lol^^ also dann muss ich leider sagen das ich dringend aktualisieren muss, und ich habe die ganze nacht mit verbracht und bin leider zu kein ergebniss gekommen. Ich habe das droßdem mit meiner index.php versucht.

    Apache Configuration
    DirectoryIndex index.php index.html
    
    
    RewriteEngine On
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(html?|php)\ HTTP/
    RewriteRule ^index\.(html?|php)$ http://www.xxxxx.de/ [R=301,L]
    RewriteCond %{HTTP_HOST} !^www\.xxxxxxx\.de$
    RewriteRule ^(.*)$ http://www.xxxxxxx.de/$1 [L,R=301]

    so sah zum schluß meine .htaccess aus... beim mein Hoster habe ich auch den httpd Mode -> WebServer mod_rewrite auf "on" muss ich die PHP register_globals auf "off" stellen? mm.. bin total verzweifelt komme nicht weiter..... grgrr :roll::roll:

  • Was spricht gegen die Parameterübergabe und warum willst du das nicht?


    Und wenn

    PHP
    if ( empty ($sy) ) { $sy = 'startseite'; }


    bei dir funktioniert, dann hast du eine völlig veraltete PHP-Version bzw. -Konfiguration


    Naja, vielleicht hat er in der oben.php bereits $sy geholt, wer weiß das schon ;), ansonsten haste recht.

    PHP
    <?php
    $sy = $_GET['sy'];
    if(empty($sy)) { $sy = 'startseite'; }
    echo $sy;
    ?>


    Das hier funktioniert zumindest tadellos, genau so wie es soll.


    [...]


    [...]


    Warum nicht gleich mit der RewriteConditions arbeiten?

    Code
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !=/favicon.ico


    auch ist dein Rewrite vermurkst.
    1. Die 2te Gruppe wird geschluckt.
    2. es geht nur wenn du einen Pfad mit 2+ Ebenen hast.


    So müsste es für den Fall aussehen:

    Apache Configuration
    RewriteRule ^(.*)$ index.php?sy=$1 [QSA,L]


    Einem SEO willst du doch kein RegEx erklären, oder? :D

  • Zum Part SinnlosS: Richtig, das mit dem zweiten Parameter war mir auch noch aufgefallen, hatte ich ihm im ICQ gesagt als er mich angeschrieben hatte. Ansonsten bin ich absolut kein Mod_Rewrite-Experte, das ist einfach eine .htaccess wie ich sie in einigen Projekten verwendet habe und wie sie bei mir einwandfrei lief. Habe wohl aber aus dem falschen Projekt kopiert gehabt bei dem zwei Parameter per Mod_Rewrite gematcht werden müssen und die eine Stelle vergessen auf einen Parameter anzupassen ^^
    Normalerweise matche ich nur noch alles auf einen einzigen Parameter und zerlege mir den Rest passend in einem PHP Dispatcher bzw. Router.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Hehe, dito, ich kenn auch nur den kleinkram den ich da brauch *g* (die conditions hab ich mir z.B. aus einer Drupal .htaccess geklaut :roll: )

    Wenn der RegEx geklärt ist, ist ja alles jud (bin mitlerweile ein großer Fan von)

    Wenn du schon sagst, dass du das irgendwo in einem Projekt so verwendest:

    Apache Configuration
    RewriteRule !images/ - [C]


    als info: sobald 'images/' vorkommt, wird die Regel drunter nicht anspringen. Sprich diese Regel greift auch auf Pfade wie '/blub/party-images/overview' ;) - bevor du dich irgendwo kaputt-debugst. Wenn du wirklich sichergehen willst, dass es den Ordner betrifft (was zwar immer noch ne Einschränkung bei URL's ist, aber das sollte doch selten zutreffen):

    Apache Configuration
    RewriteRule !^images/ - [C]

    Einmal editiert, zuletzt von Grevas (7. Dezember 2011 um 20:12)

  • Danke für den Hinweis, das ist mir aber bewußt und durchaus beabsichtigt so :)
    Meine Projekte haben in der Regel diese Ordnerstruktur:

    Code
    - application
    - core
    - error-logs
    - libraries
    - templates
    - www
        - css
        - js
        - images
        - index.php


    Die Seiten-Url verweist dabei auf /www/index.php als Bootstrap. Innerhalb des www-document-roots liegen also eh ausschließlich Dateien die auch von der Website eingebunden werden sollen. Wenn da noch Unterordner explizit geschützt werden müssen bekommen die eigene .htaccess-Dateien.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • nach 1000mal testen, bin ich immer noch nicht weiter gekommen.

    Das "$sy" das sy habe ich selber mal eingefügt glaube da stand früher mal "$id" oder so. Die index.php liegt ja im root und oben.php und unten.php im unterordner "include" spielt das auch noch eine rolle?

    Also hab folgendes eingefügt:

    Im unterordner "unternehmen" ist jetzt die "info.php" drinne. Ich sehe in der Browserlieste wen ich jetzt auf der seite http://www.xyz.de/unternhemen/info bin und ein link anklicken will steht immer der unterordner drin ".de/unternehmen/" -> http://www.xyz.de/unternhemen/produkt/pc er soll ja aber http://www.xyz.de/produkt/pc machen.

    Hoffe ich hab es verständlich geschrieben. Und ist es notwendig das ich RewriteBase / alle odner eintragen muss ? RewriteRule !^image/ - [C] etc.... ?

    :lol:

  • PHP
    <?php
    $sy = $_GET['sy'];
    if(empty($sy)) { $sy = 'startseite'; }
    echo $sy;
    ?>


    Das hier funktioniert zumindest tadellos, genau so wie es soll.


    Ist aber leider nicht wirklich schön, dann schon eher:

    PHP
    <?php
    $sy = isset($_GET['sy']) ? $_GET['sy'] : 'startseite';
    echo $sy;
    ?>
  • und warum soll der aus 'http://www.xyz.de/unternhemen/produkt/pc' auf einmal das unternehmen rauskicken?

    Apache Configuration
    RewriteRule !^unternehmen/ - [C]


    Das ist lediglich eine Einschränkung, die besagt, die Pfade die mit 'unternehmen' anfangen, sollen ausgelassen werden - nicht der Sinn und zweck oder?

    in dem konkreten Fall könntest du sowas machen:

    Apache Configuration
    RewriteRule ^(produkt/.*)$ index.php?sy=unternehmen/$1 [QSA,L]
    RewriteRule ^(.*)$ index.php?sy=$1 [QSA,L]


    damit werden alle URLs die auf Produkt gehen intern auf unternehmen/produkt/... gemappt

    // EDIT: ups, da steht ja !^produkte , n kleiner aber feiner Unterschied... trotzdem, etwas Sinn hat der kram noch
    Was du allerdings mit

    Apache Configuration
    RewriteRule !^produkte/ - [C]


    jetzt unterbindest :roll:
    Schmeiss am besten alle Regeln die so anfangen

    Apache Configuration
    RewriteRule !^


    raus, wenn du von Regulären Ausdrücken kein plan hast, helfen sie dir nicht.
    (die Rewrite Conditions, erfüllen schon den Zweck, dass Dateien geladen werden können)

    @Bandit: natürlich, dein altes Avatar aber auch ;)

    2 Mal editiert, zuletzt von Grevas (8. Dezember 2011 um 20:49)

  • also nochmal, es funktioniert jetzt !! Ich habe das <base href="http://www.xxxx.de"> im <head> und register_globals ist auf "off". Meine index.php sieht jetzt so aus:

    Hätte vtl. jemand anders eine lösung, das ich kein <base href="http://www.xxxx.de"> im <head> einfügen muss ?

  • wenn deine Links so aussehen wie ich annehme (z.B. href="produkt/pc"):

    Solche links beziehen sich immer auf den Aktuellen Pfad auf dem man sich befindet (relative Links, das Beispiel oben entspricht './produkt/pc'), sprich wenn du bei 'produkt/pc' bist und noch mal auf 'produkt/pc' verlinkst geht der Link auf 'produkt/produkt/pc'. Die Lösung wäre Absolute zu verwenden, also: '/produkt/pc'.