2017-01-28 4 views
1

gegeben zu zeigen, ein Problem mit dem Ansatz zu sein scheint, ich bin mit alles zu index.php umleiten, die in meinem Stammordner ist public_html. Es sollte keine Ausnahmen geben Dies ist natürlich, es sei denn, ein Ordner schaltet RewriteEngine aus. Zur Vereinfachung lässt sich einfach sagen, dass ich www.example.com als meine Website verwende.Browser scheint Abfrage von .htaccess

Meine .htaccess sieht wie folgt aus:

RewriteEngine on 
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
  • Als Beispiel wollen wir im Browser sagen, dass ich ein: www.example.com/test
  • Er leitet intern wie beabsichtigt : www.example.com/index.php?url=test

Das Problem:

  • ich den Browser einfach möchte noch an: www.example.com/test
  • Allerdings zeigt der Browser jetzt: www.example.com/test/?url=test

Dieser unordentlich Name nur zeigt, wenn ich einen Ordner Test im Wurzelverzeichnis genannt habe. Wenn ich den Ordner löschen, es zeigt:

  • www.example.com/test

Doch wenn ich den Ordner wieder hinzufügen, es zeigt:

  • www .beispiel.com/test /? url = test

Es leitet immer noch richtig um, aber es sieht nicht mehr sauber aus. Worüber ich neugierig bin ist, was genau bewirkt, dass es sich so verhält und wie es gelöst werden kann.

Bitte beachten Sie, dass ich immer die URL neu schreiben möchte. Ich möchte also keine Ausnahmen für Ordner machen. Es sollte gleich aussehen und funktionieren, egal ob es einen Ordner gibt oder nicht.


bearbeiten 1:


bearbeiten 2 Der Stammordner public_html, so example.com (als Beispiel) wäre: Geänderte Formulierung der Frage, die Frage ist immer noch die gleichen.


bearbeiten 3: Die Formatierung der Frage wurde geändert.

bearbeiten 4: Hinzugefügt, dass ich die URL neu schreiben möchte, unabhängig davon, ob existiert oder nicht existiert ein Ordner.

+0

Derzeit verwende ich als Lösung mit einem Schrägstrich hinzuzufügen. Also würde www.example.com/test zuerst in www.example.com/test/ konvertiert werden. Es zeigt nicht den /? Url = -Test, wenn Sie einen abschließenden Schrägstrich verwenden. Ich bin mir immer noch nicht bewusst, warum es den URL-Parameter an erster Stelle gezeigt hat. – Rup7ur3

Antwort

0

Sie müssen diesen Einsatz in Ihrem .htaccess:

RewriteEngine On 
RewriteRule ^([^/]*)$ /test/?url=$1 [L] 

Dieser Code, den Sie mit Ihrem gewünschten URL verlassen wird. Stellen Sie sicher, dass Sie den Cache löschen, bevor Sie ihn testen.

+0

Vielen Dank für Ihre Antwort, leider scheint es nicht zu funktionieren. Ich änderte die Formulierung und das Format der Frage, um genauer zu sein. – Rup7ur3

0

Dies kann weitere Änderungen erfordern, um genau das zu tun, was Sie wollen, aber mit RewriteCond können Sie Bedingungen angeben, wann die URL tatsächlich neu geschrieben werden soll.

RewriteEngine On 
RewriteBase/
##perform rewrite only if requested file does not exist... 
RewriteCond %{REQUEST_FILENAME} !-f 
##perform rewrite only if requested directory does not exist... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]*)$ /test/?url=$1 [L] 
Verwandte Themen