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