oliver3
Goto Top

URL Rewrite mit .htaccess Datei

Moin moin,

momentan probiere ich mittels einer .htaccess Datei meine URL umzuschreiben, damit diese im Browser ansprechender wirkt.

Beispiel: http://meinewebsite.com/index.php?l=de soll zu http://meinewebsite.com/de werden, http://meinewebsite.com/index.php?l=en zu http://meinewebsite.com/en usw.

Zu Testzwecken habe ich dafür einfach eine neue Ubuntu Server (20.04) VM aufgesetzt mit einem Apache Webserver(2.4.41) und PHP (7.4).


Die Standard-Konfigurationsdatei vom Apache habe ich entsprechend angepasst, damit .htaccess Dateien greifen:


(/etc/apache2/sites-available/000-default.conf)


<VirtualHost *:80>
         ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        **<Directory /var/www/html>
        AllowOverride all
        </Directory>**
       

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>


Das "Rewrite-Modul" für den Apache wurde aktiviert und ist geladen.

Im DocumentRoot (/var/www/html) liegen nun folgende Dateien:

-index.php
-.htaccess

Inhalt der index.php:

<?php

echo '<span style="margin: 15px;"><a href="index.php?l=de">DE</a></span>';  

echo '<span style="margin: 15px;"><a href="index.php?l=en">EN</a></span>';  

?>

Zwei Schaltflächen um entsprechend den Sprachparameter in der URL zu ändern.

Inhalt der .htacces

RewriteEngine on
RewriteBase /


RewriteRule ^(.*)$ index.php?l=$1 [L]

Meiner Erkenntnis nach sollte die RewriteRule eigentlich für das Verhalten sorgen welches ich am Anfang beschrieben habe. Leider passiert mit der URL aber nix.

Dass die .htaccess Datei überhaupt berücksichtigt wird habe ich mit einem deny from all schon getestet

Jemand eine Idee wo hier der Fehler liegt ?

Content-Key: 1258628512

Url: https://administrator.de/contentid/1258628512

Printed on: April 26, 2024 at 08:04 o'clock

Member: colinardo
Solution colinardo Sep 14, 2021 updated at 10:59:28 (UTC)
Goto Top
Servus.
Meiner Erkenntnis nach sollte die RewriteRule eigentlich für das Verhalten sorgen welches ich am Anfang beschrieben habe. Leider passiert mit der URL aber nix.
Nein das tut es so leider überhaupt nicht face-smile
RewriteRule ^(.*)$ index.php?l=$1 [L]
Diese Regel besagt schreibe in diesem Verzeichnis alles um und hänge an index.php?l= alles an was im URL-Pfad steht, indem fall also "index.php", solche Sachen führen im schlimmsten Fall zu einem Loop.

Ebenso hier ein Fehler:
**<Directory /var/www/html>
       AllowOverride all
       </Directory>**
Die Sternchen musst du da schon weg machen.

Das gewünschte kannst du in einer .htaccess hiermit erreichen
RewriteEngine on

RewriteCond %{REQUEST_URI} ^/index\.php$ [NC]
RewriteCond %{QUERY_STRING} l=([a-z]+) [NC]
RewriteRule .* /%1 [R=301,L,QSD]

Siehe Beispiel
https://htaccess.madewithlove.be?share=2a7a20c6-c979-4d85-b1e9-c8a978768 ...

Wie immer ist die Doku dein Freund
https://httpd.apache.org/docs/current/mod/mod_rewrite.html

Grüße Uwe
Member: Oliver3
Oliver3 Sep 14, 2021 at 10:34:19 (UTC)
Goto Top
Hallo Uwe,

vielen Dank für deine Hilfe.

Ich hatte meine Infos bezüglich der RewriteRule aus einem YouTube Video (https://www.youtube.com/watch?v=WIEa7daIZNo), wobei ich nicht verstehe wie es dort funktionieren konnte.

Natürlich weiß ich, dass YouTube für so etwas nicht immer die beste Wissensquelle ist.

Ich werde mich dann mal in die Doku einlesen face-smile

Beste Grüße
Oliver
Member: colinardo
colinardo Sep 14, 2021 updated at 10:44:39 (UTC)
Goto Top
Natürlich weiß ich, dass YouTube für so etwas nicht immer die beste Wissensquelle ist.
Mit dieser Erkenntnis hast du schon 95% geschafft face-wink. Lesen, verstehen, selbst tippen und damit spielen ist auf lange Sicht einfach nachhaltiger als copy n' paste aus Videos.

Viel Erfolg!