.htaccess 的行為不符合預期

.htaccess 的行為不符合預期

儘管我是 htaccess 的新手,但過去幾天我學到了很多東西,但我陷入了某個部分,導致網站的行為不符合預期。這是我有 delima 的程式碼部分:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME}.php -f
Rewriterule ^ %{REQUEST_FILENAME}.php [NC]
# RewriteCond /templates/%{REQUEST_FILENAME}.html -f
RewriteRule ^([^/\.]+)$ index.php?$1 [NC,S=1]
RewriteRule ^([a-zA-Z0-9]+)$ product.php?product_id=$1 [NC]

第一個 RewriteCond 和 RewriteRule 工作得非常完美。我的問題是接下來會發生什麼。

我需要實現的是,當用戶輸入/一些詞它將搜尋同名檔案是否在/模板資料夾,因此將其用作index.php?,否則它將被用作product.php?product_id=some-word。的索引.php當第二個條件被註解掉時,規則效果很好,但當僅添加產品.php規則有效。

提供的「標籤」可以是數字、字母、連字符的單字(即任意單字)或數字和字母的組合。規則應該不區分大小寫。

我感謝有關此事的任何幫助。

答案1

問題是那%{REQUEST_FILENAME}絕對從 URL 翻譯而來的路徑,即http://example.com/foobar它可能類似於/var/www/vhost/example.com/httpdocs/foobar(取決於您的網頁伺服器的設定方式)。我建議您在 URL 上使用模式匹配,如下所示

RewriteCond %{DOCUMENT_ROOT}/templates/$1.html -f
RewriteRule ^([^\/\.]+)$ index.php?$1 [NC,S=1]

(不過我沒有測試過)

相關內容