2016-07-12 12 views
0

Ich war verrückt zu versuchen, meine .htaccess Arbeit zu machen, und folgte mehreren Beispielen ohne Erfolg (natürlich, sie zu ändern, weil sie meistens statisch waren).Apache htaccess für generische hübsche URLs

Mein Problem ist, dass ich eine generische .htaccess müssen, um zufällige PHP-Dateien (Weglassung die PHP-Erweiterung), zum Beispiel umleiten:

  • /xxxxx/Lasten /xxxxx.php
  • /Yyyyy/zz Lasten /yyyyy.php?param=zz

Dies ist, was ich mit nicht Erfolg versuchen:

<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteCond %{HTTP_HOST} ^MYDOMAIN [NC] 
RewriteRule ^(.*)$ http://MYDOMAIN/$1 [L,R=301,NC] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

RewriteRule ^(.*?)/?$    /$1.php    [NC,L] 
RewriteRule ^(.*?)/?(.+)$   /$1.php?param=$2 [NC,L] 

</IfModule> 

Das Problem ist, dass ich 500 Serverfehler bei jeder Anfrage bekomme. Wenn ich die letzte Regel kommentieren, dann:

  • /xxxx korrekt funktioniert
  • /xxxx/korrekt funktioniert
  • /xxxx/yyyy nicht richtig funktioniert (es ist nicht das wollte Parameter Umschreiben).

Jede Hilfe wird geschätzt, da ich nicht wirklich weiß, was hier passiert.

P.S. Ich habe auch ein „Anhalten“ Regel am Anfang wie setzen getestet:

RewriteRule ^.*\.php.*$ - [L] 

Und dann kann ich beide Regeln haben, ohne einen 500-Server-Fehler, nur 404 in den Parametern Fall ist.

Antwort

1

Sie erhalten 500, weil Ihre letzte Regel ohne Bedingungen ausgeführt wird und unendliche Schleifen verursacht.

Sie können diese Regeln in Ihrer Website root .htaccess verwenden:

RewriteEngine On 

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

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f 
RewriteRule ^([^/]+)/([^/])/?$ $1.php?param=$2 [QSA,L] 
+0

@StormByte: Hat diese Arbeit für Sie? – anubhava