处理文件名中的“#”符号

时间:2015-04-07 23:03:08

标签: .htaccess special-characters filenames symbols

包含"#"的歌曲在尝试从我的网站下载时,在曲目标题中给出了404错误。如何解决这个问题?

这是我当前的.htaccess代码:

RewriteRule ^download/([^/]*)-([^/]*).mp3$ download.php?download=$2&pl=$1

2 个答案:

答案 0 :(得分:3)

#永远不会达到apache。它是一个跳转标记,#之后的网址中的所有内容都不会发送到网络服务器。 javascript:document.location.hash跳转到页面中的锚点。您可以使用%23转义#,即使没有htaccess也可以访问您的网络服务器。当您使用php时,您可以使用htmlentities($ filename)或urlencode($ filename)在输出期间修复它。

答案 1 :(得分:0)

来自 Apache manual

  

默认情况下,?#等特殊字符将转换为其十六进制代码。使用[NE]标志可以防止这种情况发生。

 RewriteRule ^download/([^/]*)-([^/]*)\.mp3$ download.php?download=$2&pl=$1 [NE,QSA,NC,L]

以上示例将重定向/download-foo-bar.mp3  到download.php?download=bar&pl=bar#1。省略[NE]标记将导致# 被转换为十六进制代码%23。,这将导致404未找到错误条件。

RewriteRule模式中,点(。)是一个特殊字符,它匹配任何字符。如果要匹配文字点(。),请使用反斜杠将其转义。