[英]Why does “RewriteRule (.*)” fails, and RewriteRule .* works?
我將這個.htaccess放在我的根文件夾中:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule (.*) public/$1 [L]
</IfModule>
它將導致500內部服務器錯誤,沒有任何解釋。
如果我刪除了偏癱,它將起作用:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* public/$1 [L]
</IfModule>
為什么? 此處的肢體不適不是中立的嗎?
我正在使用最新的XAMPP版本(Windows)。
正則表達式組用圓括號括起來,在這種情況下,表達式.*
匹配所有內容,因此始終使用該規則。
使用括號中的表達式,該規則映射到public/WhateverIsInsideParenthesis
,因為$1
是對組1 (.*)
的后向引用。 在這種情況下唯一的。
沒有括號,該規則僅映射到public/
,因為沒有組。 括號內什么也沒有。
您沒有提供該請求的示例,而是提供了以下信息:
http://example.com/folder1/folder2/script1/
,括號內的URI路徑為folder1/folder2/script1/
,替換網址為:
http://example.com/public/folder1/folder2/script1/
因此,在這種情況下,有或沒有括號的原因都有很多。 規則映射到的請求,循環等都可能產生該錯誤。 500 Internal Server Error是用於發生所有錯誤的常規HTTP status code
。
如果輸入起始字符^
會怎樣?
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*) public/$1 [L]
</IfModule>
是的,該模式的括號是中性的。
但是,當您在替換中將捕獲的字符串用作$1
時,它們會有所不同。 那么該規則等同於
RewriteRule (.*) public/$1
要么
RewriteRule .* public/
當您省略括號並用$0
替換$1
時
RewriteRule .* public/$0
那么您將再次遇到相同的錯誤,這次沒有括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.