Entfernen Sie sowohl index.php als auch die Dateierweiterung auf anderen PHP-Seiten mithilfe von .htaccess

Entfernen Sie sowohl index.php als auch die Dateierweiterung auf anderen PHP-Seiten mithilfe von .htaccess

Ich möchte die Notwendigkeit beseitigen, index.php in meine Links einzubinden. Statt

example.com/about/index.php

Ich möchte, dass es

example.com/about/

Zweitens möchte ich, dass auch andere Nicht-Indexseiten ohne die Dateierweiterung .php in der URL navigierbar sind. Anstatt

example.com/about/who_we_are.php

Ich möchte, dass es

example.com/about/who_we_are

Ich habe kein Glück, beides gleichzeitig zum Laufen zu bringen. Folgendes steht in meiner .htaccess-Datei:

Options -Indexes
DirectoryIndex index.php index.htm index.html
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Derzeit werden .php-Dateien von Nichtindexseiten entfernt, aber alle Verzeichnisindexseiten werden auf die Homepage umgeleitet.

Was mache ich falsch?

Antwort1

Kurz nachdem ich diese Frage gepostet hatte, fand ich eine Lösung für dieses Problem.

# remove .php; use THE_REQUEST to prevent infinite loops
RewriteCond %{HTTP_HOST} ^www\.example\.com
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [R=301]

# remove index
RewriteRule (.*)index$ $1 [R=301]

# remove slash if not directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]

# add .php to access file, but don't redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]

Ich hoffe, dies hilft allen anderen, die nach einer Lösung für dieses Problem suchen.

verwandte Informationen