it-swarm.com.de

Entfernen der .php-Erweiterung mit mod_rewrite

Ich möchte eine mod_rewrite-Regel festlegen, damit ich auf eine Seite ohne die Erweiterung .php verweisen kann, die aber umgeschrieben wurde, um die Erweiterung php einzuschließen. Dies wird auf einem 1 & 1 Server laufen.

Gibt es gute Referenzen, damit ich selbst mehr lernen kann?

38
James
RewriteEngine On
RewriteRule something something.php [L]

http://example.com/something wird so behandelt, als wäre es eine Anfrage für something.php

alle Anfragen , die keine physische Datei sind, auf denselben Namen, sondern mit .php umleiten:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]
52
Dan Grossman

Die akzeptierte Antwort oben entfernt die Erweiterung .php nicht aus URLs. Sie können nur .php-Dateien ohne Erweiterung besuchen. Um die Erweiterung .php vollständig aus URLs zu entfernen, können Sie die folgenden Regeln in root/.htaccess verwenden:

RewriteEngine on

#1)externally redirect "/file.php" to "/file"   
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
#2)Internally map "/file" back to "/file.php"
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /$1.php [NC,L]
11
starkeen

Wahrscheinlich möchten Sie das Suffix überhaupt nicht haben. Die beste Methode, die ich gefunden habe, ist die Verwendung der Files-Direktive in .htaccess oder in Apache-Konfigurationsdateien:

<Files myscript>
   SetHandler cgi-script
</Files>

Dies vermeidet einige Nachteile der Umschreibung, z. B. den direkten Zugriff auf die .php-Datei.

3
Poor Yorick

.htaccess-Datei: Fügen Sie die folgenden Zeilen hinzu:

Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

https://alexcican.com/post/how-to-remove-php-html-htm-extensions-mit-htaccess/

Jetzt müssten Sie in der Datei Apache2.log nach der AllowOverride-Bedingung suchen: Set-Optionen AllowOverRide All in Ihrem Web-Stammverzeichnis:

    Options Indexes FollowSymLinks  
    AllowOverride All  
    Require all granted

Wenn Sie versuchen, auf Ihre Webseite ohne die Erweiterung ".php" zuzugreifen, wird möglicherweise der folgende Fehler in Ihrer Apache-Datei "error.log" angezeigt: /var/www/html/web/.htaccess: Ungültiger Befehl 'RewriteEngine', möglicherweise falsch geschrieben oder von einem Modul definiert, das nicht in der Serverkonfiguration enthalten ist

Um dieses Problem zu beheben: Das Modul mod_rewrite ist nicht installiert. So installieren Sie es: .__ Führen Sie den folgenden Befehl aus: ln -s /etc/Apache2/mods-available/rewrite.load/etc/Apache2/mods-enabled/rewrite.load

.htaccess: Ungültiger Befehl 'RewriteEngine', möglicherweise falsch geschrieben oder von einem Modul definiert, das nicht in der Serverkonfiguration enthalten ist

Nach dem Aktualisieren der Webseite wird möglicherweise der folgende Fehler in der Datei error.log angezeigt:

[negotiation:error] [pid 4650] [client 127.0.0.1:46461] AH00687: Negotiation: discovered file(s) matching request: /var/www/html/web/test (None could be negotiated). (I was trying to access localhost/web/test.php using the url: localhost/web/test)

Um dies zu beheben, müssten Sie die folgenden Zeilen in Apache2.conf hinzufügen:

<IfModule mod_mime.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .html
AddType application/x-httpd-php-source .phps

https://forums.digitalpoint.com/threads/htaccess-addtype-application-x-httpd-php-php-htm-html-and-maybe-a-fix.7584/#post-2491687

Jetzt kann ich auf die Datei test.php nur mit dem Dateinamen zugreifen: test

2
user3683297

Diese Option macht saubere SEO-freundliche URLs. Entfernen von Erweiterungen von .php aus der sichtbaren URL und Sicherstellen, dass auf die URL ohne die .php zugegriffen wird, wird die .php-Datei weiterhin angezeigt. Ich konnte keine andere Antwort finden, die dies in mehreren Threads erreichte. 

Denken Sie daran, die Mod-Umschreibung zu aktivieren. Unter Debian oder Unbuntu Linux funktioniert Folgendes

Sudo a2enmod umschreiben

und

Sudo-Dienst Apache2 neu starten

Ändern Sie den entsprechenden Abschnitt Ihrer Apache2.conf-Datei wie folgt.

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule (.*) $1.php [L]
        RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
        RewriteRule ^ /%1 [NC,L,R]
</Directory>

Wenn Sie .htaccess zum erneuten Schreiben verwenden, stellen Sie sicher, dass für Apache2.conf mindestens diese Optionen aktiviert sind.

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        RewriteEngine On
</Directory>

Bei einigen Apache-Installationen müssen Sie möglicherweise auch AllowOveride All In einer .conf-Datei in/etc/Apache2/sites-available oder/etc/Apache2/sites-enabled einstellen.
Das Umschreiben aus der Datei Apache2.conf im Gegensatz zu .htaccess gilt als angeblich schneller. 

1
Greggory Wiley

Für das Leiten einiger einzelner Dateien kann es einfacher sein, die RewriteEngine zu vermeiden. 

Ich habe das benutzt:

<Files $filename>
   SetHandler application/x-httpd-php
</Files>

Das ist weniger leistungsfähig und flexibel als das Umschreiben, aber wahrscheinlich schneller und scheint der richtige Weg zu sein, wenn Sie nur einige bestimmte Dateien als PHP behandeln möchten. 

0
John

So erhalten Sie http://example.com/test linking http://example.com/test.php use:

RewriteEngine on
RewriteRule ^([^\.]+)$ /folder/$1.php [NC,L] 
0
Zon

Aus irgendeinem Grund konnte ich keine andere Lösung richtig zum Laufen bringen. Ich stelle dies in eine .htaccess-Datei im Stammverzeichnis meiner Site. Hoffentlich klappt das für Sie.

RewriteEngine on #only use this once per .htaccess
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

Beachten Sie, dass Ihre Kopf- oder URL-Erweiterung die Erweiterung .php nicht entfernt. Sie müssen die Erweiterung entfernen.

Benutze das...

header 'location: /login';

lieber als das...

header 'location: /login.php';
0
EternalHour