Iis
防止 URL 重寫規則被 IIS7 中的子目錄繼承
我有一個用於 CMS 中乾淨 URL 的 URL 重寫設置,我的 web.config 如下所示:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="Clean URLs" stopProcessing="true"> <match url="^([^/]+)/?$" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="?id={R:1}" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
它基本上變成
index.php?id=something
了something
乾淨的 URL。非常簡單,而且效果很好。在 CMS 中很常見,為了防止後端中斷,每個子目錄都需要web.config
<remove name="Clean URLs" />
或<clear />
在其 web.config 中,因此不會繼承規則。有沒有辦法通過某種方式將規則的範圍限制為僅目前目錄,在父規則中指定它根本不應該被其子規則繼承?像
<rule name="Clean URLs" stopProcessing="true" inherit="no">
史詩般的東西。
經過 4.5 小時的Google搜尋後找到了答案!
http://runtingsproper.blogspot.co.uk/2010/04/solved-breaking-parent-webconfig.html
基本上利用
<location path="." inheritInChildApplications="false"> <system.webServer> <!-- ... --> </system.webServer> </location>
我最近在類似的情況下遇到了這個問題。但是 rjenkins 的回答似乎會導致依賴於父設置繼承的虛擬應用程序出現問題。
如果您知道重寫規則的名稱,您可以這樣做:
<rewrite> <rules> <remove name="RewriteNameToDisable" /> </rules> </rewrite>