同时重写两个条件是行不通的

时间:2014-05-16 16:59:35

标签: apache mod-rewrite url-rewriting

我想在apache web服务器中重写url。我的网络项目有两条路径如下:

1- www.test.com/folder1/folder2/index?v1=1&v2=2&v3=3 ==>我想重写www.test.com/index/1/2/3

2- www.test.com/folder3/folder4/index?v1=1&v2=2&v3=3 ==>我想重写www.test.com/index/1/2/3

我的重写鳕鱼如下:

#RewriteCond %{REQUEST_URI} !^/folder1/folder2
#RewriteRule ^(.*)$ /folder1/folder2/$1 [L]


RewriteCond %{REQUEST_URI} !^/folder3/folder4
RewriteRule ^(.*)$ /folder3/folder4/$1 [L]

谢谢....

1 个答案:

答案 0 :(得分:0)

你有的重写似乎暗示如果在浏览器网址栏中输入了网址“www.test.com/index/1/2/3”,你想要在内部将其重写为其中一个网址请求参数。显而易见的原因,这是不可能的。一个网址可以(或应该)只链接到另一个内部网址。

如果您希望两个带有查询字符串的网址都加载同一页面,那么您的网站将在搜索引擎中因“重复内容”而受到惩罚。这就是你如何做到的。

RewriteCond %{QUERY_STRING} ^v1=([^&]*)&v2=([^&]*)&v3=([^&]*)$
RewriteRule ^(folder1/folder2|folder3/folder4)/index$ index/%1/%2/%3 [L]

%1%3被前一个重写条件中的第一个,第二个和第三个捕获组所取代。在这种情况下,查询字符串中的值为v1,v2和v3。

可以找到文档here