我正在努力让我的网页更友好。
我的页面中有链接。
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
答案 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)
Apache必须在映射URL之前取消URL,因此在应用它们时,反向引用( $ 1 )将不会被转义。
因此,您的feedback+%26+enquiry.htm
会被重写为test.php?title=feedback+&+enquiry
,这自然会产生您看到的结果。
您可以通过在RewriteRule中添加'B'
(转义反向引用)重写标记来避免反向引用:
RewriteRule ^pages/(.*)\.htm$ /test.php?title=$1 [R,B]