Linux

為什麼 .htaccess 規則在 Linux 上不起作用(ubuntu 14.04)

  • January 26, 2017

我已將執行 WAMP 的 Windows 機器上的站點複製到具有標準 LAMP 堆棧的 Linux 機器上。

除了 .htaccess 中的規則外,一切正常。我已經通過測試一個簡單的規則確認 .htaccess 正在工作,所以我知道它與 apache 配置無關。這些規則在我的 Windows 機器上執行得非常好。

這是我的 .htaccess 文件中的規則副本。

RewriteRule ^admin/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/$ index.php?admin=1&class=$1&id=$2&method=$3 [L,QSA]
RewriteRule ^admin/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/$ index.php?admin=1&class=$1&method=$2 [L,QSA]
RewriteRule ^(.*)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/$ index.php?class=$1&id=$2&method=$3 [L,QSA]
RewriteRule ^admin/([A-Za-z0-9-]+)/$ index.php?admin=1&class=$1 [L,QSA]
RewriteRule ^(.*)/([A-Za-z0-9-]+)/$ index.php?class=$1&method=$2 [L,QSA]
RewriteRule ^download/([A-Za-z0-9-]+.*) index.php?class=downloads&method=download&target=$1 [L,QSA]
RewriteRule ^stream/([A-Za-z0-9-+]+.*) index.php?class=downloads&method=download&target=$1 [L,QSA]
RewriteRule ^(.*)/$ index.php?class=$1 [L,QSA]

有什麼理由說明這些不能在 Linux 上執行。

編輯:

我請求的 URL 是http://domain.com/access所以我創建了這個有效的規則RewriteRule access index.php?class=access

我請求的網址是http://example.com/access

您發布的所有規則都不符合此類請求。最後一條規則需要尾部斜杠,因此http://example.com/access/(帶有尾部斜杠)應該可以正常工作。

要使尾部斜杠可選,您可以將最後一條規則更改為:

RewriteRule ^(.*)/?$ index.php?class=$1 [L,QSA]

請注意,RewriteRule 模式只是從更改^(.*)/$^(.*)/?$-?使得前面的字元/組是可選的。如果根本不需要尾部斜杠,則將其刪除。

引用自:https://serverfault.com/questions/828734