.htaccess用php隐藏参数和语言选择

时间:2012-06-12 21:10:31

标签: php apache .htaccess mod-rewrite

我似乎无法获取我的.htaccess文件来正确地将网址路由到我的网站。我有很多语言,人们可以从想要的URL中选择:

http://www.domain.com/en/
http://www.domain.com/en/contact

但在撰写规则以获取'en'变量时,我似乎无法使页面'联系'正常工作。

RewriteRule /([^/]+)/([0-9]+)/ index.php?language=$1

我用它来获取语言代码,但我怎样才能让联系页面起作用?

修改

显然我需要一些QSA选项,但现在语言获取变量抓取联系人作为变量与en

RewriteRule ^(.*)$ index.php?language=$1 [QSA,L]

使用此规则的网站:

http://www.domain.com/en/contact

返回:

en/contact

EDIT2

我想要完成的是目录结构:

/
/contact
/about

将这些文件夹放在根目录中,但是抓住并忽略/ en / language变量。所以我不需要为& page = contact提供第二个变量,我需要它来路由到目录文件夹。

1 个答案:

答案 0 :(得分:1)

尝试组合两个表达式,虽然您需要修改第二个组 - [0-9]+只匹配数字,而不是像contact这样的单词。试试这个:

RewriteRule ^([^/]+)/([^/]+)/?$ index.php?language=$1 [QSA,L]

QSA选项允许将查询字符串附加到干净的URL,可能是这样的:

http://www.domain.com/en/contact?to=support&subject=Hello

在回应你的评论时,这个表达应该可以解决问题:

RewriteRule ^([^/]*)/([^/]+)/?$ $2/index.php?language=$1 [QSA,L]

在重写的规则中,$2代表contact,而$1代表en。前者用作目录,后者用作查询字符串中的参数。