htaccess正则表达式下划线和空格不起作用

时间:2011-10-12 18:04:40

标签: regex apache .htaccess mod-rewrite

RewriteRule ^([A-Za-z0-9'"%ãõáéíóúâêîôûàÁÃÕÁÉÍÓÚÂÊÎÔÛÀ\/\.\-]*)$ public_html/$1 [NC]

我在这里使用这个正则表达式它工作得很好,但如果我举个例子:

RewriteRule ^([A-Za-z0-9 _'"%ãõáéíóúâêîôûàÁÃÕÁÉÍÓÚÂÊÎÔÛÀ\/\.\-]*)$ public_html/$1 [NC]

这在这里不起作用。因为空格和下划线,我想在正则表达式中包含空格和下划线,但它根本不起作用。我必须添加一些特别的东西吗?

这也不起作用:

RewriteRule ^(.*)$ public_html/$1 [NC]

我希望能够输入任何内容并在public_html文件夹中打开。

例如,我输入:www.mysite.com/site_1.php 然后它打开:www.mysite.com/public_html/site_1.php

此.htaccess表达式正在使用Apache 2.2.17在HostGator服务器中进行测试 我也在我的localhost Apache 2.2.17中进行了测试,同样的事情发生了。

添加_和空格或。*时给出的错误是:

  

内部服务器错误

     

服务器遇到内部错误或配置错误   无法完成您的请求。

     

请联系服务器管理员admin @ localhost并通知   他们发生错误的时间,以及你可能做过的任何事情   可能导致错误。

     

有关此错误的详细信息可能在服务器错误中可用   日志中。

提前谢谢你们。

1 个答案:

答案 0 :(得分:3)

来自regular-expressions.info

  

字符类中唯一的特殊字符或元字符是右括号(]),反斜杠(\),插入符号(^)和连字符({{ 1}})。通常的元字符是字符类中的普通字符,不需要用反斜杠转义。

除了上面提到的字符集之外,您不应该转义字符集中的字符。这里的简单技巧是确保将连字符保留在角色类的非常结束处。这将连字符标识为文字。

-

为了避免“连续循环”,您可以在匹配规则之前包含此条件:

RewriteRule ^([a-zA-Z0-9'"%ãõáéíóúâêîôûàÁÃÕÁÉÍÓÚÂÊÎÔÛÀ _/.-]*)$ public_html/$1 [NC]

另外,如果你只是想像你所说的那样匹配所有内容,我通常会做类似下面的事情。请注意,RewriteCond %{ENV:REDIRECT_STATUS} ^$ 可以传递任何GET变量。如果您不打算使用常规GET变量,则可以删除它。

%{QUERY_STRING}

我希望这些信息可以帮助你。