Dot-Htaccess

一個 RewriteCond 用於多個 RewriteRules

  • June 2, 2021

我需要保留所有使用者查詢字元串。

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^$ index.html?page=home&%1

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^about$ index.html?page=about&%1

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^contact$ index.html?page=contact&%1

如何為所有 RewriteRules 指定 RewriteCond ?

我不期待單個通用控制器 RewriteRule,因為這是一個小型靜態網站。

對於您的三個範例,這些將起作用:

RewriteRule ^$ index.html?page=home [QSA,L]
RewriteRule ^about$ index.html?page=about [QSA,L]
RewriteRule ^contact$ index.html?page=contact [QSA,L]

訣竅是“QSA”標誌。

編輯:一個稍微更通用的解決方案,這基於 Drupal 是如何做到的:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.html?page=$1 [L,QSA]

!-f 很重要,因為否則您無法提供圖像或 index.html 本身。!-d 行可以刪除,具體取決於您正在做什麼。稍微不同的方法可能是:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)$ index.html?page=$1 [L,QSA]

它將擷取 /foo 和 /bar,但不會擷取 /foo/、/bar/ 或 /foo/bar。

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