问题相当简单,但我现在无法找到答案。
我需要做的是:
RewriteRule ([^#])#(.*) $1\%23$2
这基本上意味着我想要从外部代码中找到来自我的恶搞哈希符号。
反斜杠(\
)无法逃避此符号...请不要建议使用%23
代替#
,因为它不起作用。
(%2
3与#
不匹配,因为它不是== %23
)
答案 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;
?>