正确配置.htaccess以避免此错误“给定路径包含通配符:”

时间:2013-07-30 13:34:35

标签: perl apache .htaccess wildcard

我需要向我的网络服务器发送一些参数,其中包含特殊字符,例如< *>进入网址。

  

例如:http://localhost/mypage/X123*12362issasa.

这个特殊字符我会将它用于一些正则表达式。

当我尝试这个时,我得到了这个

  

“403禁止您无权访问   /我的空间/ X123 * 12362issasa。在这台服务器上。“

apache_error.log包含以下行:

  

[error] [client 127.0.0.1](20025)给定路径包含通配符   字符:访问/ mypage / X123 * 12362issasa失败

我的.htaccess包含以下行:

Options +ExecCGI

AddHandler cgi-script .cgi .pl .py .php

DirectoryIndex mypage.pl

<IfModule mod_charset.c> 
  CharsetRecodeMultipartForms off 
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ mypage.pl?oid=$1
</IfModule>

有人可以帮我正确配置.htaccess文件以接受这种特殊字符吗? 任何帮助都会被贬低。 感谢。

1 个答案:

答案 0 :(得分:3)

您不应在网址中使用星号的原因。

1)根据标准未编码的URL中允许使用星号 ,但根据RFC 1738 Uniform Resource Locators (URL),它是一个特殊字符。所以在这种情况下它有特殊用途。

  

RFC 1738统一资源定位器(URL)1994年12月

     

保留:

     

许多URL方案为特殊含义保留某些字符:     它们在URL的特定于方案的部分中的出现有一个     指定的语义。如果对应于八位字节的字符是     在方案中保留,八位字节必须被编码。人物&#34;;&#34;,     &#34; /&#34;,&#34;?&#34;,&#34;:&#34;,&#34; @&#34;,&#34; =&#34;和&#34;&amp;&#34;是可能的人物     保留给计划中的特殊含义。没有其他角色可以     在计划中保留。

     

通常,当八位字节为时,URL具有相同的解释     由字符表示并在编码时。但事实并非如此     保留字符为true:编码为a保留的字符     特定方案可能会改变URL的语义。

     

因此,只有字母数字,特殊字符&#34; $ -_。+!*&#39;(),&#34;和     可以使用用于其保留目的的保留字符     在URL中未编码。

     

另一方面,不需要编码的字符     (包括字母数字)可以在特定方案内编码     URL的一部分,只要它们不用于保留     目的

此外,在标题中,它根据RFC 2068 HTTP 1.1用于仅服务器声明。

  

9.2选项

     

OPTIONS方法表示有关的信息请求     请求/响应链上可用的通信选项     由Request-URI标识。这种方法允许客户端     确定与资源相关的选项和/或要求,     或服务器的功能,而不暗示资源操作     或启动资源检索。

     

除非服务器的响应是错误,否则响应不得     包括除可以被视为之外的实体信息     通信选项(例如,允许是合适的,但内容类型     不是)。对此方法的响应无法缓存。

     

如果Request-URI是星号(&#34; *&#34;),OPTIONS请求是     旨在作为一个整体应用于服务器。 200响应应该     包括指示可选功能的任何标题字段     由服务器(例如,公共)实现,包括任何扩展     除了任何适用的以外,本规范未定义     general或response-header字段。如5.1.2节所述,     &#34; OPTIONS *&#34;可以通过指定来通过代理应用请求     Request-URI中的目标服务器,没有任何路径信息。

     

如果Request-URI不是星号,则OPTIONS请求适用     仅限于与之通信时可用的选项     资源。 200响应应该包括任何标题字段     表示服务器实施并适用的可选功能     到该资源(例如,允许),包括未定义的任何扩展     除本规范外,任何适用的一般或     响应标头字段。如果OPTIONS请求通过a     代理,代理必须编辑响应以排除这些选项     适用于代理的功能,以及已知的功能     通过该代理无法使用。

2)它是RFC 3986 URI Generic Syntax January 2005的保留字符(子分隔符)(感谢@Daxim指出这一点)。

  

2.2。保留字符

     

URI包括由
分隔的组件和子组件   &#34;保留&#34;中的字符组。这些字符称为
  &#34;保留&#34;因为他们可能(或可能不会)被定义为分隔符   通用语法,每种方案特定的语法,或由   URI的解除引用算法的特定于实现的语法   如果URI组件的数据与保留的数据发生冲突   字符作为分隔符的目的,那么冲突的数据必须是   在URI形成之前进行百分比编码。

     

reserved = gen-delims / sub-delims

     

gen-delims =&#34;:&#34; /&#34; /&#34; /&#34;?&#34; /&#34;#&#34; /&#34; [&#34; /&#34;]&#34; /&#34; @&#34;

     

sub-delims =&#34;!&#34; /&#34; $&#34; /&#34;&amp;&#34; /&#34;&#39;&#34; /&#34;(&#34; /&#34;)&#34;                   /&#34; *&#34; /&#34; +&#34; /&#34;,&#34; /&#34;;&#34; /&#34; =&#34;

     

保留字符的目的是提供一组   分隔与其他数据可区分的字符   在URI中。替换保留的URI不同的URI   具有相应的百分比编码八位字节的字符不是   当量。百分比 - 编码保留字符或解码   与保留字符对应的百分比编码八位字节,   将改变大多数应用程序解释URI的方式。从而,   保留集中的字符不受规范化和   因此,特定计划和安全使用是安全的   用于分隔数据子组件的特定于生产者的算法   在URI中。

3)在某些主机操作系统中,它被用作通配符。

无论哪种方式,都应该避免在请求URI中使用未编码的星号。