重写多语言规则

时间:2014-01-29 11:51:07

标签: .htaccess mod-rewrite url-rewriting

目前网站没有使用重写,我正在重写网站和.htaccess以加入这个。它是多语言的,目前通过查询字符串(?lang=en/es/de)更改语言。

我想格式化网址,使其显示为http://website.com/en/products/product1

目前,页面存储为单独的文件,换句话说,它是完全重写,例如: http://website.com/index.php?page=product1&category=product&lang=en

变为:

http://website.com/en/products/product1

页面都存储在根目录中,但我使用了单独的规则来重写单独的文件(因为它只是一个小网站)。

我遇到的问题是,我在其他地方找到的正则表达式解决方案替换了?lang=en部分,然后将它放在URL的末尾。我怎么能直接在URL中的域之后来到它?如上所示?

希望这是明确的,提前谢谢。

2 个答案:

答案 0 :(得分:1)

将此代码放入DOCUMENT_ROOT/.htaccess文件中:

RewriteEngine On
RewriteBase /

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} \s/+index\.php\?page=([^&]*)&category=([^&]*)&lang=([^&\s]*) [NC]
RewriteRule ^ /%3/products/%1? [R=302,L]

# internal forward from pretty URL to actual one
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /index.php?page=$3&category=product&lang=$1 [L,QSA]

答案 1 :(得分:0)

我认为这希望/ *复制并粘贴下面,保存名称。 htaccess * /

RewriteEngine On
RewriteBase /website.com/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
#ex1:http://website.com/en/products/product1
RewriteRule ^([a-zA-Z_-]+)/([a-zA-Z_-]+)/([a-zA-Z_-]+)?$ index.php?lang=$1&category=$2&page=$3 [L]

/ *并在你的文件php * /

<!-- #ex1:http://website.com/en/products/product1 -->
<a href="<?php echo "en/products/product1" ?>">Link</a>