HTAccess Page重定向问题&标志

时间:2010-07-18 12:10:15

标签: .htaccess mod-rewrite seo url-rewriting

我正在努力让我的网页更友好。

我的页面中有链接。

http://abc.com/test.php?Section=pages&title=feedback+%26+enquiry

它工作正常,标题有价值“反馈和询问”。我将上面的链接更改为:

http://abc.com/pages/feedback+%26+enquiry.htm

我写了htaccess代码,如:

Options +FollowSymLinks

RewriteEngine on
RewriteRule index.htm$ index.php
RewriteRule ^(.*)/(.*)\.htm$ /test.php?Section=$1title=$2 [R]

我期望结果相同,但我很惊讶地看到错误,因为标题有价值或“feedbac”和新变量“查询”正在创建值“”

我无法找到错误。我想它的htaccess转换错误。那我怎么能让它发挥作用呢?

我试过backescaping但是内部服务器出错了。我的新htaccess代码:

Options +FollowSymLinks

RewriteEngine on
RewriteRule index.htm$ index.php
RewriteRule ^(.*)/(.*)\.htm$ index.php?Section=$1&title=$2 [R,B]

我的Apache版本是:2.2.4

2 个答案:

答案 0 :(得分:0)

如果您正在运行Apache 2.2,则可以使用B标志来转义重写URL中的任何反向引用:

RewriteRule ^pages/(.*)\.htm$ /test.php?title=$1 [R,B]

否则,在Apache 2.0中,您可以尝试使用内部RewriteMap escape

RewriteRule ^pages/(.*)\.htm$ /test.php?title=${escape:$1} [R]

答案 1 :(得分:0)

from the mod_rewrite doc

  

Apache必须在映射URL之前取消URL,因此在应用它们时,反向引用( $ 1 )将不会被转义。

因此,您的feedback+%26+enquiry.htm会被重写为test.php?title=feedback+&+enquiry,这自然会产生您看到的结果。

您可以通过在RewriteRule中添加'B' (转义反向引用)重写标记来避免反向引用:

RewriteRule ^pages/(.*)\.htm$ /test.php?title=$1 [R,B]