2014-06-18 270 views
2

這是我第一次使用web.config進行url重寫,以隱藏在IIS服務器上運行的文件的.php和.htm擴展名。通過谷歌搜索,我得到了這個代碼來隱藏profile.htm和contact.php的擴展名。在IIS服務器上重寫web.config url以隱藏.php和.htm擴展名

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
<system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="RewriteRules"> 
      <match url="profile.htm$" /> 
      <action type="Rewrite" url="profile" /> 
      <match url="contact.php$" /> 
      <action type="Rewrite" url="contact" /> 
     </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 
</configuration> 

然而,當我在服務器上的根目錄添加此web.config文件,它給了我「500內部服務器錯誤」的信息,並沒有任何的網頁的工作。有沒有語法錯誤或其他什麼?我能得到幫助解決這個問題嗎?

另一個問題:我也想鏈接.htm或.php代碼中的不同頁面來隱藏.htm或.php擴展名。例如,我以前使用聯繫人的href鏈接,現在我想指出它沒有擴展名聯繫的目錄。 url重寫可以做同樣的工作嗎?還是我需要做其他事情?

謝謝!

回答

3

下面是你如何能做到這(它不會使用重寫地圖 - 只有規則,這是罰款重寫少量/重定向):

此規則將做某個確切重寫(內部重定向)/yourpage改爲/yourpage.html。瀏覽器中的URL將保持不變。

<system.webServer> 
<rewrite> 
    <rules> 
     <rule name="SpecificRewrite" stopProcessing="true"> 
      <match url="^yourpage$" /> 
      <action type="Rewrite" url="/yourpage.html" /> 
     </rule> 
    </rules> 
</rewrite> 

301重定向(永久重定向),其中URL將在瀏覽器中,如果有這樣的文件以.html改變

<system.webServer> 
<rewrite> 
    <rules> 
     <rule name="SpecificRedirect" stopProcessing="true"> 
      <match url="^yourpage$" /> 
      <action type="Redirect" url="/yourpage.html" /> 
     </rule> 
    </rules> 
</rewrite> 

嘗試的任何URL執行這樣的重寫擴展名(例如,/ yourpage會檢查/yourpage.html是否存在,如果確實存在,則重寫):

<system.webServer> 
<rewrite> 
    <rules> 
     <rule name="DynamicRewrite" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions> 
       <add input="{REQUEST_FILENAME}\.html" matchType="IsFile" /> 
      </conditions> 
      <action type="Rewrite" url="/{R:1}.html" /> 
     </rule> 
    </rules> 
</rewrite> 

+1

我試過第三個解決方案,它仍然給我500個內部服務器錯誤。我沒有嘗試前兩個解決方案,因爲我想做相反的事情:隱藏.php或.html擴展名。我能獲得進一步的幫助嗎?謝謝! – user3752922