Linux

.htaccess 修改規則並在 url 中有 .php 時重定向

  • January 31, 2011

我的 .htaccess 中有以下程式碼:

Options +FollowSymlinks
RewriteBase /temp/test/
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^about/(.*)/$ $1.php [L]
RewriteRule ^(.*)/download/(.*)/(.*)/(.*)/downloadfile/$ file-download.php?product=$1&version=$2&os=$3&method=$4 [L]
RewriteRule ^(.*)/download/(.*)/(.*)/(.*)/$ download-donate.php?product=$1&version=$2&os=$3&method=$4 [L]
RewriteRule ^(.*)/download/(.*)/$ download.php?product=$1&version=$2 [L]
RewriteRule ^subscribe/(.*)/$ subscribe-$1.php [L]
RewriteRule ^subscribe/(.*)/(.*)/$ subscribe-$1.php?email=$2 [L]
RewriteRule ^(.*)/screenshots/$ screenshots.php?product=$1 [L]
RewriteRule ^(.*)/(.*)/$ products.php?product=$1&page=$2 [L]
RewriteRule ^schedule-manager/$ products.php?product=schedule-manager&page=view [L]
RewriteRule ^visual-command-line/$ products.php?product=visual-command-line&page=view [L]
RewriteRule ^windows-hider/$ products.php?product=windows-hider&page=view [L]
RewriteRule ^(.*)/$ $1.php [L]

一切都很完美。我想知道如何修改它以減少行數。我很確定我至少可以刪除 4-5 行,但我不知道如何。(合併日程管理器、視覺化命令行和 windows-hider 等等)。

我知道規則的順序很重要,這個順序有效——雖然我不知道為什麼,我只是按照規則玩,直到它有效。如果您認為以下順序存在錯誤,請告訴我在哪裡。

另一件事 - 我想將例如 www.myweb.com/products.php 重定向到 www.myweb.com/products/ (我的意思是地址欄中的 URL 會改變)。

我不知道重定向是否可以與我的重寫規則一起使用。

謝謝你。

編輯:刪除了產品的 RewriteRule(Orbling 提到的)並更改了 1 條規則

順序很重要,因為您需要確保與細節匹配的規則出現在通用規則之前,一般規則也會捕捉細節但不應該。

因此,例如,以下雙參數行:

RewriteRule ^newsletter-confirm/(.*)/$ newsletter-confirm.php?email=$1 [L]
RewriteRule ^newsletter-remove/(.*)/$ newsletter-remove.php?email=$1 [L]
RewriteRule ^(.*)/screenshots/$ screenshots.php?product=$1 [L]

需要在泛型雙參數之前:

RewriteRule ^(.*)/(.*)/$ products.php?product=$1&page=$2 [L]

否則,它們將匹配為產品(帶頁面)請求。只要您考慮到該優先級的順序,它就應該可以接受。

您可以重構規則以使其更簡潔,但可能以可讀性為代價。唯一多餘的規則是最後一條,因為倒數第二行抓住了它。

RewriteRule ^(.*)/$ $1.php [L]
RewriteRule ^products/$ products.php [L]

products/是 generic 的一個特定情況(.*)/,因此在處理過去到最後一條規則之前,generic 將匹配。幸運的是,它仍然有效,因為關鍵字幸運地與文件名相同。

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