2014-01-29 55 views
0

目前网站不使用重写,我正在重写网站和.htaccess以整合此过程。它是多语言的,目前语言通过查询字符串(?lang=en/es/de)更改。多种语言的重写规则

我想格式化URL,所以它读取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中的域之后,如上所示?

希望这是明确的,在此先感谢。

回答

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> 
+0

是假的(SEO)目录**产品**而类别需要**产品**?小心点! –

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] 
+0

注意我提到的是**不是当前的URL格式**,页面被存储为单个文件,如'http:// website.com/fluffy-bunny.php'和'http://website.com/small -cat.php' – Charlie

+0

您也写过'我想格式化URL以便它读取http:// website.com/en/products/product1'此规则适用于该方案。 – anubhava

+0

好吧...似乎没有工作,理想情况下,我应该尝试让我的头绕过正则表达式。你会建议我'我的网站'转换为'多个查询字符串'格式的整个'单一索引页面? – Charlie