2016-02-17 86 views
2

我有域名xyz.com託管在Windows服務器上。.htaccess to web.config用於URL重寫和重定向

xyz.com的代碼是用PHP編寫的(以前是在ASP.NET中)。數據庫是MySQL(以前它是在SQL服務器中)。

現在重新開發PHP的整個網站後,我才知道.htaccess將無法​​在Windows服務器上工作。我必須玩web.config

這裏是.htaccess代碼時,我是PHP重新開發網站本地我用:

RewriteRule index.html index.php 

RewriteRule news.html news.php 
RewriteRule search-results.html search-results.php 

RewriteRule ^([A-Za-z0-9_\-]+).html$ pages.php?pageid=$1&%{QUERY_STRING} [ne] 

一個奇怪的事情發生

當我在web.config中,它正在完美地添加下面的代碼行

<rules> 
       <clear /> 
       <rule name="Redirect to google.com" stopProcessing="true"> 
        <match url="^google$" /> 
        <action type="Redirect" url="http://www.google.com/" appendQueryString="false" /> 
       </rule> 
</rules> 

上面的代碼我重定向到google.com,這意味着重寫模塊已啓用

但是當我添加下面提到的代碼的web.config

<rules> 
      <rule name="REWRITE_TO_PHP"> 
      <match url="^(.+).html$" /> 
       <conditions logicalGrouping="MatchAll" /> 
       <action type="Rewrite" url="pages.php?pageid={R:1}" /> 
      </rule> 

它給我的錯誤:

HTTP錯誤500.19 - 內部服務器錯誤 請求的頁面不能因爲相關配置訪問該頁面的數據無效。

任何人都可以幫助我創建相當於web.config代碼嗎?

+0

任何人都可以幫忙嗎?自8小時以來我就陷入了這些! – user3782114

回答

0

做[R & d長時間,並試圖各種不同的方式後,我找到了解決辦法,這是我整個的web.config的內容

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 



    <system.webServer> 
     <defaultDocument enabled="true"> 
      <files> 
       <clear /> 
       <add value="index.php" /> 

      </files> 
     </defaultDocument> 

     <rewrite> 
      <rules> 

      <rule name="Imported Rule 3" stopProcessing="true"> 
       <match url="^index\.html$" ignoreCase="false" /> 
       <action type="Rewrite" url="index.php" appendQueryString="false" /> 
      </rule> 

      <rule name="Imported Rule 2" stopProcessing="true"> 
       <match url="^news\.html$" ignoreCase="false" /> 
       <action type="Rewrite" url="news.php" appendQueryString="true" /> 
      </rule> 

      <rule name="Imported Rule 4" stopProcessing="true"> 
       <match url="^(.*)\.html$" ignoreCase="false" /> 
       <action type="Rewrite" url="pages.php?pageid={R:1}" appendQueryString="false" /> 
      </rule> 





      </rules> 
     </rewrite> 

    </system.webServer> 




    <system.data> 
     <DbProviderFactories> 
     <remove invariant="MySql.Data.MySqlClient" /> 
     <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.3.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
    </system.data> 
</configuration> 

這將是誰的人非常有用試圖在Window Server上託管PHP網站

0

的禮貌:http://cbsa.com.br/tools/online-convert-htaccess-to-web-config.aspx

<?xml version="1.0" encoding="UTF-8"?> 
    <configuration> 
     <system.webServer> 
      <rewrite> 
       <rules> 
        <rule name="rule 1p"> 
         <match url="index.html" /> 
         <action type="Rewrite" url="/index.php" /> 
        </rule> 
        <rule name="rule 2p"> 
         <match url="news.html" /> 
         <action type="Rewrite" url="/news.php" /> 
        </rule> 
        <rule name="rule 3p"> 
         <match url="search-results.html" /> 
         <action type="Rewrite" url="/search-results.php" /> 
        </rule> 
        <rule name="rule 4p"> 
         <match url="^([A-Za-z0-9_\-]+).html$" /> 
         <action type="Rewrite" url="/pages.php?pageid={R:1}&amp;%{QUERY_STRING}" /> 
        </rule> 
       </rules> 
      </rewrite> 
    </system.webServer> 
</configuration> 
+0

我試過去了以下錯誤「 HTTP錯誤500.19-內部服務器錯誤 請求的頁面無法訪問,因爲該頁面的相關配置數據無效 」 – user3782114

+0

您是否正確地封裝了xml? <?XML版本= 「1.0」 編碼= 「UTF-8」?> <結構> user1785684

+0

是的,我做到了這樣 – user3782114

0

試試這一個。

在你的web.config文件中,找到

<rewrite> 
    <rules> 

這和把這裏面的代碼。 <rewrite><rules> .. codes here... </rules></rewrite>標籤。

<rule name="rule 1y"> 
    <match url="index.html" /> 
    <action type="Rewrite" url="index.php" /> 
</rule> 
<rule name="rule 2y"> 
    <match url="news.html" /> 
    <action type="Rewrite" url="news.php" /> 
</rule> 
<rule name="rule 3y"> 
    <match url="search-results.html" /> 
    <action type="Rewrite" url="search-results.php" /> 
</rule> 
<rule name="rule 4y"> 
    <match url="^([A-Za-z0-9_\-]+).html$" /> 
    <action type="Rewrite" url="pages.php?pageid={R:1}&amp;%{QUERY_STRING}" /> 
</rule> 

所以文件看起來是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 

    <configSections> 
     <sectionGroup name="system.webServer"> 
      <sectionGroup name="rewrite"> 
       <section name="rewriteMaps" overrideModeDefault="Allow" /> 
       <section name="rules" overrideModeDefault="Allow" /> 
      </sectionGroup> 
     </sectionGroup> 
    </configSections> 

    <system.webServer> 
     <rewrite> 
      <rule name="rule 1y"> 
       <match url="index.html" /> 
       <action type="Rewrite" url="index.php" /> 
      </rule> 
      <rule name="rule 2y"> 
       <match url="news.html" /> 
       <action type="Rewrite" url="news.php" /> 
      </rule> 
      <rule name="rule 3y"> 
       <match url="search-results.html" /> 
       <action type="Rewrite" url="search-results.php" /> 
      </rule> 
      <rule name="rule 4y"> 
       <match url="^([A-Za-z0-9_\-]+).html$" /> 
       <action type="Rewrite" url="pages.php?pageid={R:1}&amp;%{QUERY_STRING}" /> 
      </rule> 
     </rewrite> 
    </system.webServer> 
</configuration> 

注:請不要直接與你的web.config文件替換代碼。只需將所需的行放在web.config文件中。

+0

爲了您的信息我的整個php代碼被上傳到xyz.com/demo/ 上面提到的代碼給了我沒有錯誤,但是當我輸入xyz.com/demo/index.html url將它重定向到未找到頁面 – user3782114

+0

請將動作中的網址更改爲像'或''... –

+0

我按照您的要求編輯代碼。我在**/index.php **之前從'..「之後刪除了斜槓。現在代碼看起來像是' –