我服務使用Apache的文件和應用程序的請求,App請求使用RewriteRule
發送模式相匹配,以我的應用程序服務器的網址。如何使用Apache中的現有文件只設置HTTP標頭的conf
我希望設置一個特定的HTTP報頭(緩存控制)僅適用於不從上述匹配RewriteConds
請求。有沒有辦法做到這一點,而不使用.htaccess
文件?
我試過在RewriteRule
(它使用L標誌)之後放置Header set
指令,但標題仍然得到應用。
我服務使用Apache的文件和應用程序的請求,App請求使用RewriteRule
發送模式相匹配,以我的應用程序服務器的網址。如何使用Apache中的現有文件只設置HTTP標頭的conf
我希望設置一個特定的HTTP報頭(緩存控制)僅適用於不從上述匹配RewriteConds
請求。有沒有辦法做到這一點,而不使用.htaccess
文件?
我試過在RewriteRule
(它使用L標誌)之後放置Header set
指令,但標題仍然得到應用。
你真的應該張貼您的RewriteRules。
有肯定是我們可以做到這一點。首先我在想的是設置一個環境變量來匹配rewriteRules(所以一組rewriteCond,反轉以前的),使用[E=myvar:myvalue]
標籤;並使用Header指令[env=myvar]
的最後一個可用參數來條件設置此Header。
然後你說:
有沒有這樣做,沒有使用.htaccess文件的方法嗎?
那麼,RewriteRules和.htaccess文件是鬆散相關的。你在的.htaccess設置任何真的適合在<Directory>
指令更好地與您的虛擬主機,以防止來自Apache的IO操作的looooot一個不錯的AllowOverride None
,試圖在每個請求讀了一堆的.htaccess文件。
第二件事,你說:
我試過把頁眉設置指令重寫規則的 (它使用了L位)
好後的[L]
標誌防止幾個的RewriteRules一個接一個地應用相同的目錄,所以他們現在不會被鏈接到direclty。但事實上,在你的rewriteRule結束之後([L]),rewriteRule的輸出將重新應用到目錄中,以查看是否仍應用任何RewriteRule(也許是同一個)。
這就是爲什麼我們有時會看到太多的內部重定向消息。
要想看到它發生的唯一方法是在VirtualHost上使用RewriteLog /a/file.log
和RewriteLogLevel 9
(有時會出現很多驚喜,有些規則有時會伴隨大量遞歸)。
一個很好的的RewriteCond已知的是:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
這種的RewriteCond任何前綴規則將僅應用於您進入該目錄最早出現的時候,你的規則結束後(也許用[L]或者因爲沒有更多規則),結果將在直接規則中重新測試,但env變量REDIRECT_STATUS不爲空。如果設置了此env變量,此條件會告訴mod-rewrite以避免該規則。