Php .htaccess mod_rewrite导致500而不是404(无限内部重定向)

Php .htaccess mod_rewrite导致500而不是404(无限内部重定向),php,apache,.htaccess,redirect,mod-rewrite,Php,Apache,.htaccess,Redirect,Mod Rewrite,我的目标是从url中删除.php扩展,并创建语义url多语言站点。以下是我的.htaccess规则: # 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

我的目标是从url中删除.php扩展,并创建语义url多语言站点。以下是我的.htaccess规则:

# 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
所以我有一些情况,当这个规则起作用的时候,也有不起作用的时候。以下是一些有效的方法:

  • domain.com/ru/event/region/some event name
  • domain.com/event/region/some-event-name
而那些不起作用的(当我添加一些内容时,粗体),会导致500个错误:

  • domain.com/events/region/some事件名称
  • domain.com/events/region/some事件名称/
  • domain.com/event/region/some event name/something

您需要停止现有文件和目录的规则执行。你的规则如下:

#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]

感谢@anubhava为我指明了正确的方向。有你的帮助,我能解决我的问题。这是可行的解决方案

#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]