我已将此.htaccess放在我的根文件夹中:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule (.*) public/$1 [L]
</IfModule>
它会导致500内部服务器错误而无需解释。
如果我删除了它的作用:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* public/$1 [L]
</IfModule>
为什么呢? Aren的禁忌在这里应该是中立的吗?
我使用的是最新的XAMPP版本(Windows)。
答案 0 :(得分:1)
正则表达式组用圆括号括起来,在这种情况下,表达式.*
匹配所有内容,因此始终使用规则。
使用括号中的表达式,规则映射到public/WhateverIsInsideParenthesis
,因为$1
是对组1的后引用:(.*)
。在这种情况下唯一的一个。
如果没有括号,规则只会映射到public/
,因为没有组。括号内没有任何内容。
您没有提供请求的示例,而是提供类似的内容:
http://example.com/folder1/folder2/script1/
括号内的URI路径为folder1/folder2/script1/
和替换网址:
http://example.com/public/folder1/folder2/script1/
因此,在这种情况下出现错误有几个原因,有或没有括号。规则映射到的请求,循环等等都可能生成该错误。 500内部服务器错误是用于出错的一般HTTP status code
。
答案 1 :(得分:0)
如果将起始字符^
放入?
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*) public/$1 [L]
</IfModule>
答案 2 :(得分:0)
是的,对于模式,括号是中性的。
但是当你在替换中使用捕获的字符串$1
时,它们会有所不同。然后该规则等同于
RewriteRule (.*) public/$1
或
RewriteRule .* public/
当您遗漏括号并将$1
替换为$0
RewriteRule .* public/$0
然后再次出现相同的错误,这次没有括号。