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

我在这里使用这个表达式,它工作得很好,但如果我把例如:htaccess的正则表达式下划线和空间行不通

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

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

,这也不起作用:

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

我希望能够键入的public_html文件夹中任何事情,开放的。

实施例,I型:www.mysite.com/site_1.php 然后它打开:www.mysite.com/public_html/site_1.php

这htaccess的表达被在HostGator的服务器使用测试Apache 2.2.17 ,我也在我的本地主机Apache 2.2.17中测试过,同样的情况发生。 。

的错误添加_和空间,或当给定*是这样的:

内部服务器错误

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

请联系服务器管理员[email protected],并告知他们发生错误的时间,以及您可能已经完成的任何可能导致错误的事情 。

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

谢谢你们提前。

+2

转义空格,否则Apache会将其视为正则表达式模式的结束。所以使它成为空间而不是空间。至于内部服务器错误,请查看服务器的错误日志。它将具体说明造成它的原因(可能是使重写过程的空格字符有语法错误)。 –

+0

感谢您的回答,这有助于解决空间问题,但剩下的问题呢? *和下划线? – Grego

+0

不要以为'_'是这些正则表达式中的一个metachar。但试着逃避它,看看会发生什么。使用'_'或'。*'时仍会出现内部错误?再次检查错误日志,看看它是不同的消息。 –

回答

3

regular-expressions.info来自:

一个字符类中的唯一的特殊字符或元字符是闭合支架(]),反斜杠(\),插入符号(^)和连字符(-)。通常的元字符是字符类中的普通字符,不需要用反斜线进行转义。

除了上面提到的字符集之外,你不应该逃避字符集中的字符。这里的简单诀窍是确保连字符保持在角色类的最后。这将连字符识别为文字。

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

为避免出现“连续循环”,你可以在你的比赛规则之前,包括这个条件:

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 

另外,如果你只是想匹配一切都像您也谈到了,我通常做什么如下所示。请注意,%{QUERY_STRING}可以传递任何GET变量。如果您不打算使用常规GET变量,则可以将其删除。

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteRule ^(.*)$ /index.php?request=$1&%{QUERY_STRING} 

我希望这些信息能帮助你。

相关问题