2016-04-22 13 views
2

Es ist ziemlich viel Inhalt auf mod_rewrite verfügbar, aber ich konnte einfach nicht das Folgende zum Funktionieren bringen.Umgang mit nachfolgenden Schrägstrichen in htaccess

Im Moment habe ich den folgenden Code in meiner .htaccess-Datei:

RewriteEngine On 
Options -Indexes 
Options -Multiviews 
ErrorDocument 400 http://localhost/mywebsite/400.php 
ErrorDocument 403 http://localhost/mywebsite/403.php 
ErrorDocument 404 http://localhost/mywebsite/404.php 
ErrorDocument 500 http://localhost/mywebsite/500.php 

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

Welche erfolgreich Dinge wie mywebsite/index Arbeit machen wird (statt mywebsite/index.php). Jedoch gibt es einige Situationen, in denen ich Besucher haben werde, die auf die Seite mit einem nachgestellten Schrägstrich (mywebsite/index /) zugreifen werden und dann funktioniert meine Neufassung nicht mehr. und ich erhalte eine Fehlerseite.

Also, wie soll ich es funktionieren lassen, damit jede Seite mit einem Schrägstrich, ohne Schrägstrich oder einer Erweiterung (.php) auf meiner Website funktioniert?

Ich werde hinzufügen, dass dies auf localhost auf einem Apache-Server (XAMPP) ist, falls dies beeinflusst, wie mod_rewrite funktioniert.

Antwort

2

Ersetzen Sie den Code mit diesem:

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

zu

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

Dies machte beide URLs mit abschließenden Schrägstrichen und ohne Fehlfunktion (nur URLs mit Erweiterungen funktionieren nach der Verwendung dieser) – bucketman

+0

@Bucketman versuchen Sie die aktualisierte Version, es funktioniert auf meinem Server. – starkeen

+0

Gab mir eine 404-Fehlerseite. Die Tatsache, dass es nicht funktioniert, lässt mich fragen, ob ich eine Einstellung im Apache-Server verpasst habe, was extrem seltsam wäre, da der ursprüngliche Code für alles andere als nachstehende Leerzeichen funktionierte. – bucketman

0

Eine Rewrite-Regel wie folgt aus sollte es tun:

RewriteRule ^(.*)/?$ $1.php [L] 
+0

ich meine RewriteRule mit Ihnen ersetzt aber die Schrägstrich gibt mir noch einen Fehler 500 Seite. – bucketman

+0

Worin sagen Ihre Protokolle, dass der 500-Fehler verursacht wird? Dass du keinen 404 bekommst, lässt mich denken, dass etwas anderes vor sich geht. – ceejayoz

+0

[Kern: Fehler] [Pid 10648: Tid 1840] [Client :: 1: 17180] AH00124: Anforderung überschritten das Limit von 10 internen Redirects aufgrund wahrscheinlicher Konfigurationsfehler. Verwenden Sie 'LimitInternalRecursion', um das Limit bei Bedarf zu erhöhen. Verwenden Sie 'LogLevel debug', um ein Backtrace zu erhalten. – bucketman

1

Sie verwenden können:

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

Weil Sie nicht vor testen, ob die Datei (ohne /) vorhanden sind oder nicht.

+0

Ich habe immer noch einen Fehler von 500 Seiten, wenn ich versuche, 'mywebsite/index /' mit einem Schrägstrich zu verwenden. Wenn relevant, werde ich hinzufügen, dass dies auf localhost ist, nur für den Fall, dass es betroffen ist. – bucketman

Verwandte Themen