需要在.htaccess重写规则中转义#(hash / pound)字符

时间:2010-08-27 14:15:14

标签: apache .htaccess url-rewriting escaping

问题相当简单,但我现在无法找到答案。

我需要做的是:

RewriteRule ([^#])#(.*) $1\%23$2

这基本上意味着我想要从外部代码中找到来自我的恶搞哈希符号。

反斜杠(\)无法逃避此符号...请不要建议使用%23代替#,因为它不起作用。

%2 3与#不匹配,因为它不是== %23

4 个答案:

答案 0 :(得分:28)

我刚刚在这个论坛上发布了几个帖子,我正在使用重写规则,NE不能逃脱,R = 301重定向选项:

RewriteRule ^galleries/([a-zA-Z0-9_-]+)$ /gallery.html#/$1 [R=301,NE,L]

这会将所有图库/变量重定向到 /gallery.html#/variable

编辑:规则的重要部分是NE,它指示服务器解析输出而不转义字符。如果没有这个,它将试图逃避重写规则中的#,这是OP所要求的。

答案 1 :(得分:9)

网址的哈希部分无法重写。当Web浏览器向Web服务器发送URL请求时,它会将所有内容发送到井号。哈希仅在客户端上可用(例如,JavaScript代码可以看到它)。

答案 2 :(得分:2)

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html中搜索 扩展重定向 。你的问题有一个很好的解决方案。

答案 3 :(得分:-2)

的.htaccess

RewriteRule  old\.php redirect.php?url=http://example.com/new.php|hash [R=301,QSA,L]

redirect.php

<?php
    $new_url = str_replace("|", "#", $_GET['url']);
    header("Location: ".$new_url, 301);
    die;
?>