2016-10-11 1 views
1

so habe ich eine relativ einfache Seite, wo alle Seiten eine Erweiterung .php haben, dh about.php, gallery.php usw. Ich habe auch einen Service .php Datei und auch ein Unterordner im Verzeichnis Dienste. Für mehr Klarheit ist meine Struktur unten:Seite mit dem gleichen Namen wie Unterordner nicht auflösen nach dem Entfernen von .php Erweiterung mit htaccess

root 
| 
|-index.php 
|-about.php 
|-gallery.php 
|-services.php 
|-contact.php 
|-services/ 
    |-service-one.php 
    |-service-two.php 
    |-service-three.php 
    |-service-four.php 

Wie Sie sehen werden, habe ich eine Services.php und Dienste-Ordner. In der Wurzel habe ich folgende .htaccess

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

Dies ermöglicht about.php zum Beispiel ohne die Endung .php zugegriffen werden, so http://www.domain.com/about Werke wie about.php würde. Wenn ich jedoch http://www.domain.com/services versuche, bekomme ich weder die Verzeichnisliste noch die services.php-Seite. Ich bekomme die folgende Nachricht, die ein paar Hinweise gibt.

The requested URL /services/.php was not found on this server. 

habe ich es nicht gelungen, einen Weg zu finden, dieses Problem zu beheben, frage ich mich, wenn ich eine .htaccess im Verzeichnis/Dienstleistungen Ordner benötigen?

Vielen Dank.

Antwort

1

Sie benötigen regex zwicken alles vor dem letzten / zum Spiel:

DirectorySlash Off 
Options -MultiViews -Indexes 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.+?)/?$ $1.php [L] 

RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301,NE] 

Auch Änderung beachten Sie in RewriteCond für Existenz .php Datei zu überprüfen.

+0

Ja zugestimmt. Das Problem in der OP-Regel besteht jedoch nicht nur im selben Datei-/Verzeichnisnamen. Wenn die Anfrage mit einem abschließenden Schrägstrich z.B. '/ about /' dann wird es auch scheitern. Ein weiteres Problem ist "RewriteCond" – anubhava

+0

Das hat mich irgendwo hingebracht, danke aber immer noch nicht ganz an dem Punkt, an dem ich sein möchte. Ich erhalte jetzt die Verzeichnisauflistung/den Index, wenn ich zu http://www.domain.com/services gehe. Ich habe ein paar andere Dinge vergeblich versucht, eine Sache, die das Problem umgehen würde, ist die Datei include und index.php innerhalb des Verzeichnisses/services. Dann kann ich den Inhalt von services.php einfach in diese index.php-Datei einfügen. Sound ein wenig chaotisch/riskant, obwohl zwei index.php Dateien innerhalb des Projekts haben. – user3725781

+0

Wenn die URL "http: // www.domain.com/services" lautet, möchten Sie dann den Inhalt von "http: // www.domain.com/services.php" anzeigen oder Inhalte von "http:/anzeigen" anzeigen lassen./www.domain.com/services/index.php'? – anubhava

Verwandte Themen