URL-Umschreiben in PHP ohne htaccess

Lesezeit: 4 Minuten

URL Umschreiben in PHP ohne htaccess
Vivart

Die Website wird auf einem Webhost ausgeführt, auf den wir keinen Zugriff haben .htaccess Datei. Ich möchte jedoch eine URL-Umschreibung für benutzerfreundliche URLs durchführen.

zB Original-URL

www.example.com/file?q=name

erwartete URL

www.example.com/file/name

  • Nehmen Sie einfach ein Beispiel für den Artikelabschnitt der Website. Der Benutzer reicht einen Artikel ein und es wird eine dynamische URL wie www.domain-name/articles?cat=3&id=34 generiert, aber ich möchte so wie www.domain-name/articles/cat-name/ Artikelname

    – Vivart

    24. Januar 10 um 11:29 Uhr

Wie andere Leute sagten, verwenden Sie einfach Links wie /index.php/nice/looking/url.
Die “index.php” in der Mitte der URL sieht vielleicht etwas seltsam aus, aber ich glaube nicht, dass es ohne .htaccess besser aussehen kann

Andernfalls könnten Sie Ihren Hoster bitten, alle URLs auf /index.php umzuleiten, damit Sie die URL-Umschreibung erledigen können, ohne dass Sie dies tun müssen /index.php in Ihrer URL.

Dann können Sie einfach eine Regex-Übereinstimmung verwenden, um zu erkennen, welche Datei eingeschlossen werden soll.
preg_match('@[/]{1}([a-zA-Z0-9]+)@', $_SERVER["PATH_INFO"], $matches) ($matches enthält alle “Teile” der URL in einem Array)

Seien Sie vorsichtig beim Einschließen der Dateien, verwenden Sie a Weiße Liste Sie sind also sicher, dass niemand interne Dateien laden kann.

URL Umschreiben in PHP ohne htaccess
Pentium10

wie Alix Axel vorgeschlagen hat, können Sie verwenden

www.example.com/index.php/file/name

dann wirst du verwenden $_SERVER['REQUEST_URI'] um die URL zu verarbeiten.

  • Besser verwenden $_SERVER['PATH_INFO'] anstatt $_SERVER['REQUEST_URI'] in diesem Fall.

    – Mathias Bynens

    24. Januar 10 um 11:34 Uhr

  • Diese Problemumgehung sieht gut aus. Ein Problem, wenn ich www.domain-name.com/index.php/filename verwende, sieht es so aus, als ob sich aktuelle Verzeichnisse ändern und alle CSS-Formatierungen verloren gehen und die relative Navigation auch nicht funktioniert. irgendwelche Vorschläge.

    – Vivart

    24. Januar 10 um 12:12 Uhr

  • add / base reference für Ihre jeweilige Dateireferenz wie <a href="/support.html"> </a> Verknüpfen Sie Ihr CSS auch mit der Basisreferenz src="/media/css.css"

    – Pentium10

    24. Januar 10 um 12:37 Uhr


1644076506 260 URL Umschreiben in PHP ohne htaccess
Alix Axel

Am besten verwenden Sie URLs wie diese:

www.example.com/index.php/file/name

Sie müssen jedoch Ihren PHP-Code neu schreiben.

Wenn Sie einen Apache-Server haben und AcceptPathInfo aktiviert ist, können Sie die von Ihnen geschriebene URL verwenden. Eine Anfrage von /file/name wird dann automatisch umgeschrieben /file mit dem PATH_INFO Wert von /name wenn /file ist eine normale Datei.

Dies ist ausschließlich über die Sprach-/Inhaltsaushandlung in der Apache-Konfiguration (httpd.conf oder apache2.conf) zusammen mit Rewrite-Regeln möglich. Verwendung einer .htaccess Datei ist nicht erforderlich.

Fügen Sie in der Datei apache2.conf (oder httpd.conf) die hinzu Multiviews Richtlinie, MultiviewsMatch Richtlinie und Regeln umschreiben:

<Directory /var/www/html>
    Options Indexes FollowSymLinks Multiviews
    AllowOverride None
    Require all granted

    RewriteEngine On
    RewriteCond %{THE_REQUEST} /([^.]+).php [NC]
    RewriteRule ^ /%1 [NC,L,R]

    <Files "*.php">
        MultiviewsMatch Any
    </Files>
</Directory>

Speichern Sie dann die Datei und starten Sie Apache neu sudo systemctl restart apache2

Wenn Sie die angeben Options Direktive später in httpd.conf, müssen Sie die wiederholen Multiviews Direktive für jeden Standort:

<Directory /var/www/html/chocolate.com/>
  Options FollowSymLinks Multiviews
  AllowOverride All
  Require all granted
</Directory>

<Directory /var/www/html/vanilla.com/>
  Options FollowSymLinks Multiviews
  AllowOverride All
  Require all granted
</Directory>

Dies wirkt sich nicht negativ auf die Inhaltsaushandlung aus, wenn Sie bereits in mehreren Sprachen schalten. Ersetzen Sie beispielsweise example.com/home.php durch

home.en.php home.fr.php home.de.php

Dann in apache2.conf:

AddLanguage fr .fr
AddLanguage de .de
AddLanguage en .en
LanguagePriority fr de en
ForceLanguagePriority Fallback

Ihre Sprache wird noch ausgehandelt, aber die PHP-Erweiterung erscheint nicht in der URL.

1644076506 136 URL Umschreiben in PHP ohne htaccess
Phemmytesch

oder können einen Routing-Switch in der Datei index.php erstellen:

$request = $_SERVER['REQUEST_URI'];

switch ($request) {
    case '/file' :
        require __DIR__ . '/file';
        break;
    case '' :
        require __DIR__ . '/file';
        break;
    case '/file/name' :
        require __DIR__ . '/file?q=name';
        break;
    default:
        http_response_code(404);
        require __DIR__ . '/404.php';
        break;
}

1644076506 474 URL Umschreiben in PHP ohne htaccess
Herr weiß

Versuche dies

www.example.com/file?q=name

zu

www.example.com/name (besser als www.example.com/file/name)

Öffne dein .htaccess aus Ihrem Projektstammordner und fügen Sie diesen Code hinzu

Options +FollowSymLinks

RewriteEngine On
RewriteRule .(js|css|jpe?g|png|gif)$ - [L]


RewriteRule "^([ w-]+)/?$" /file?q=$1 [L,QSA]

Dies löst Ihr Problem. Siehe den Beitrag wie es geht URL umschreiben in .htaccess

  • OP speziell angegeben “ohne htaccess”. Es steht sogar im Titel der Frage.

    – Andreas Steitz

    8. Oktober 18 um 22:52 Uhr

.

785070cookie-checkURL-Umschreiben in PHP ohne htaccess

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy