mod_rewrite for PHP的“lang?=”多个页面?

时间:2010-08-03 10:31:00

标签: php mod-rewrite

我目前在.htaccess文件中使用以下代码

RewriteEngine On
RewriteBase /

# Redirect languages
RewriteRule ^(en|es|zh\-tw|zh\-cn)/?$ index.php?lang=$1 [L]

使用该代码,每次我在URL的末尾输入/en时,它会将我重定向到/?lang=en(从PHP数组加载英文内容):

例如:

example/en将我重定向到example/?lang=en,同时在网址中保留example / en。

但我也有一个 thanks.php 页面,上面的代码显然适用于 index.php 页面。

如何让重写规则适用于index.phpthanks.php页?

1 个答案:

答案 0 :(得分:0)

最直接的方法就是这样做:

RewriteRule ^(en|es|zh\-tw|zh\-cn)/?$ index.php?lang=$1 [L]

RewriteRule ^thanks/(en|es|zh\-tw|zh\-cn)/?$ thanks.php?lang=$1 [L]

如果你想使它更通用,你可以选择白名单文件,如下所示:

RewriteCond $1    ^(thanks)/$ [OR]
RewriteCond index ^(index)$
RewriteRule ^(.+/)?(en|es|zh\-tw|zh\-cn)/?$ %1.php?lang=$2 [L]

...其中(thanks)将是您希望拥有此功能的文件的竖线分隔列表,或者您可以接受每个请求作为现有PHP页面的传递:

RewriteRule ^(en|es|zh\-tw|zh\-cn)/?$ index.php?lang=$1 [L]

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?[^/]?)/(en|es|zh\-tw|zh\-cn)/?$ $1.php?lang=$2 [L]