【发布时间】:2013-12-29 23:58:41
【问题描述】:
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 并告知 错误发生的时间,以及您可能做过的任何事情 这可能是导致错误的原因。
有关此错误的更多信息可能在服务器错误中可用 记录。
提前谢谢你们。
【问题讨论】:
-
转义空格,否则 Apache 会将其视为正则表达式模式的结束。所以让它
\space而不是space。至于内部服务器错误,请查看服务器的错误日志。它将包含导致它的确切原因(可能导致重写的空格字符有语法错误)。 -
感谢您的回答,这有助于解决空间问题,但是其余的呢? .* 和下划线?
-
不要认为
_是那些正则表达式中的元字符。但是无论如何尝试逃避它,看看会发生什么。使用_或.*时仍然出现内部错误?再次检查错误日志,看看它是否是不同的消息。 -
我试图逃跑,但它不是元字符,我删除了日志文件并刚刚加载了页面,那里没有出现错误。也许还有另一种方法来完成匹配所有字符?
-
^(.*)$ 每次都会匹配所有内容,因此您最终会陷入连续循环。你需要一个 RewriteCond 来确保你还没有在 public_html 中。您应该可以毫无问题地添加
_,您可以尝试使用\s处理空格 - 我相信这是正则表达式中空格的元字符。
标签: regex apache .htaccess mod-rewrite