我有一個由discountasp.net(一個標準的.net Web主機)託管的域。稱它爲http://example.com。重寫url規則以刪除asp.net web.config文件中子目錄的外觀
該域名託管一個默認網站,再加上有幾個獨立的網絡應用程序。
該網站是在Wordpress中創建的,它位於主機上域根目錄的/ wordpress子目錄中。
我想讓它在用戶在瀏覽器中看到的URL中沒有/ wordpress。以前,根目錄中有一個index.html文件,用於將http://example.com/的請求重定向到http://example.com/wordpress/。但這當然只是一個重定向,並在瀏覽器URL欄中留下http://example.com/wordpress/。
我以爲我可以用我的Web.config文件中的URL根目錄中的URL重寫規則實現我想要的。以下是該文件的文本。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="wordpress redirect a"> <match url="wordpress/(.*)"/> <action type="Rewrite" url="{R:1}"/> </rule> <rule name="wordpress redirect b"> <match url=".*"/> <conditions> <add input="{REQUEST_URI}" pattern=".*nm.*" matchType="Pattern" negate="true" ignoreCase="false"/> <add input="{REQUEST_URI}" pattern=".*survey.*" matchType="Pattern" negate="true" ignoreCase="false"/> </conditions> <action type="Rewrite" url="wordpress/{R:0}"/> </rule> </rules> </rewrite> </system.webServer> </configuration>
該文件的邏輯是:
第一條規則:如果URL路徑(主機之後的部分:端口/)與
wordpress/
啓動時,它消除了wordpress/
並繼續處理規則,只是在wordpress/
之後出現的部分。第二條規則:對於任何不包含特殊Web應用程序字符串「nm」或「survey」的url路徑,請在路徑前面放置
wordpress/
。
這工作,在這個意義上,如果我把http://example.com/到瀏覽器吧,它正確顯示的網站,同時該重寫不與Web應用程序調用,如http://example.com/nm/干擾......
但是,它仍然保留了用戶看到的URL中的/ wordpress(即,當我在瀏覽器欄中放置http://example.com/時,在瀏覽器欄中執行了任何重寫/重定向後,最終將返回http://example.com/wordpress/。可能是這樣我只是誤解了重寫規則的作用,但我的理解(以及我試圖用這些規則實現的)是,任何公司不包括wordpress/
的原始URL(除我的特殊Web應用程序URL)將在內部處理,就好像它包含/wordpress
一樣,但隨後以原始URL(不包括/wordpress
)的形式返回給客戶端。所以,不是重定向,只是一些內部的fakery。然後第一條規則是因爲網站中的鏈接將包括/wordpress
,並且因爲我不想獲得/wordpress/wordpress
,所以我需要在添加它之前將其剝離。
但顯然我誤解了一些東西。
另一個線索是,當我使用url http://example.com/about/時,第二個規則似乎沒有做它的工作。第二個規則應該使其運行,就好像它是http://example.com/wordpress/about/,但我得到一個404找不到錯誤。但是,如果我在瀏覽器欄中放置http://example.com/wordpress/about/,它會正確顯示該網頁。所以我很困惑。
爲什麼downvote沒有解釋? –