2017-05-24 3 views
0

Mein Ziel ist es, .php Erweiterungen von URL zu entfernen und semantische URL mehrsprachige Website zu erstellen. Hier ist meine .htaccess Regeln:.htaccess mod_rewrite verursacht 500 statt 404 (unendliche interne Weiterleitungen)

# Turn mod_rewrite on 
RewriteEngine On 

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

#Create Semantic url 
RewriteRule ^event/([A-Za-z0-9-\+]+)/([A-Za-z0-9-\+]+)/?$ calendar?region=$1&news_id=$2 [L,NC] 

#Handle language switch. 
RewriteRule ^(ru)/(.*)$ $2?sitelang=2 [L,QSA] 
RewriteRule ^(ru)$ $1?sitelang=2 [L,QSA] 
RewriteRule ^(en)/(.*)$ $2?sitelang=1 [L,QSA] 
RewriteRule ^(en)$ $1?sitelang=1 [L,QSA] 
RewriteRule ^(.*)$ $1?sitelang=1 [L,QSA] 

#404 Document /404.php 
ErrorDocument 404 /404 

So habe ich einige Fälle, wenn diese Regeln funktionieren, aber auch wenn nicht funktioniert. Also hier sind die Arbeitenden:

  • domain.com/ ru/event/Region/some-event-name
  • domain.com/event/region/some-event-name

Und diejenigen wich nicht funktioniert (wenn ich etwas, fett hinzufügen), verursacht Fehler 500:

  • domain.com/event s/Region/some-event-name
  • domain.com/event s/Region/some-event-name/
  • domain.com/event/region/some-event-name/ etwas

Antwort

1

Sie müssen aufhören Regelausführung für vorhandene Dateien und Verzeichnisse. Haben Sie Ihre Regeln wie folgt:

#404 Document /404.php 
ErrorDocument 404 /404 

# Turn mod_rewrite on 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

#Remove .php extensions from files 
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f 
RewriteRule ^(.+?)/?$ /$1.php [L] 

#Create Semantic url 
RewriteRule ^event/([\w-]+)/([\w-]+)/?$ calendar?region=$1&news_id=$2 [L,NC,QSA] 

#Handle language switch. 
RewriteRule ^(ru)/(.*)$ $2?sitelang=2 [L,QSA] 
RewriteRule ^(ru)$ $1?sitelang=2 [L,QSA] 
RewriteRule ^(en)/(.*)$ $2?sitelang=1 [L,QSA] 
RewriteRule ^(en)$ $1?sitelang=1 [L,QSA] 
RewriteRule ^(.*)$ $1?sitelang=1 [L,QSA] 
0

Danke @anubhava für mich auf richtige Richtung zeigen. Ich konnte mein Problem mit Ihrer Hilfe lösen. Hier ist die Arbeitslösung.

#404 Document /404.php 
ErrorDocument 404 /404.php 

# Turn mod_rewrite on 
RewriteEngine On 

#Remove .php extensions from files 
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f 
RewriteRule ^(.+?)/?$ /$1.php [L] 

RewriteCond %{REQUEST_FILENAME} !-f [OR] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule^- [L] 

#Create Semantic url 
RewriteRule ^event/([\w-]+)/([\w-]+)/?$ calendar?region=$1&news_id=$2 [L,NC,QSA] 

#Handle language switch. 
RewriteRule ^(ru)/(.*)$ $2?sitelang=2 [L,QSA] 
RewriteRule ^(en)/(.*)$ $2?sitelang=1 [L,QSA] 
RewriteRule ^(.*)$ $1?sitelang=1 [L,QSA] 
Verwandte Themen