簡體   English   中英

為什么“ RewriteRule(。*)”失敗,而RewriteRule。*有效?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM