使用.htaccess重写多种语言的URL

时间:2013-10-31 19:25:30

标签: php regex apache .htaccess mod-rewrite

我正在开发一个多语言网站,我在重写网址方面遇到了一些麻烦。

我必须有这样的事情:

1) mysite.com/en
2) mysite.com/en/product-one
3) mysite.com/en/product-one/id25/title-page-fake.html
4) mysite.com/en/login.php

网址重定向到:

1) mysite.com/index.php
2) mysite.com/index.php
3) mysite.com/item.php?id=25
4) mysite.com/login.php

我的.htaccess文件目前看起来像这样:

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteRule ^(.+/{0,0})$ $1/index.php [NC]
RewriteRule ^([a-z0-9\-]+/)(.*)$ $2 [NC]
RewriteRule ^id(\d+)\/.*$ item.php?id=$1&%{QUERY_STRING} [L]

有效,但会抛出异常:

由于可能的配置错误,请求超出了10个内部重定向的限制。如有必要,使用'LimitInternalRecursion'增加限制。使用“LogLevel debug”获取回溯。

1 个答案:

答案 0 :(得分:1)

好的尝试这条规则:

RewriteEngine on

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

# requirements 1 & 2
RewriteRule ^en(/product-one)?/?$ /index.php [L,NC]

# requirement # 3
RewriteRule ^en/product-one/id([0-9]+) /item.php?id=$1 [L,NC,QSA]

# requirement # 4
RewriteRule ^en/([^.]+\.php)$ /$1 [L,NC]

让我知道如果它有用,那么我也可以建议其他规则。