2013-12-10 45 views
0

У меня есть php веб-сайт, созданный под IIS 7 с использованием cakePHP. Это продолжалось довольно долго, используя не очень красивые URL-адреса формы /index.php/[controller]/[action]/[etc]. Достаточно долго для людей, чтобы закладки и Google индексировали все. Теперь я исправил web.config так, чтобы используемые URL-адреса были от /[controller]/[action]/[etc], минуя index.php в URL-адресе (внутренне все идет на одно и то же место).IIS 7.5 - redirect url /index.php/* to/*

Проблема заключается в том, что если вы посетите одну из ссылок в более старом формате, страница по-прежнему технически работает, но css/images/etc не загружается, и она выглядит уродливой. Есть ли простой способ для перенаправить из формата /index.php/* в новый формат /*?

это мой существующий web.config выполнения требуемых переделок следующее:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
      <rule name="Redirect static resources" stopProcessing="true"> 
      <match url="^(ico|img|css|files|js)(.*)$" /> 
      <action type="Rewrite" url="app/webroot/{R:1}{R:2}" appendQueryString="false" /> 
      </rule> 
      <rule name="Imported Rule 1" stopProcessing="true"> 
      <match url="^(.*)$" ignoreCase="false" /> 
      <conditions logicalGrouping="MatchAll"> 
         <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
         <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      </conditions> 
      <action type="Rewrite" url="index.php?url={R:1}" appendQueryString="true" /> 
      </rule> 
      <rule name="Imported Rule 2" stopProcessing="true"> 
      <match url="^$" ignoreCase="false" /> 
      <action type="Rewrite" url="/" /> 
      </rule> 
      <rule name="Imported Rule 3" stopProcessing="true"> 
      <match url="(.*)" ignoreCase="false" /> 
      <action type="Rewrite" url="/{R:1}" /> 
      </rule> 
      <rule name="Imported Rule 4" stopProcessing="true"> 
      <match url="^(.*)$" ignoreCase="false" /> 
      <conditions logicalGrouping="MatchAll"> 
         <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
         <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      </conditions> 
      <action type="Rewrite" url="index.php?url={R:1}" appendQueryString="true" /> 
      </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 

ответ

1

Я работал, что мне не хватало. В правиле переадресации я матч на /index.php/*, но я не понял, вы можете добавить найденную строку в пункт назначения с использованием $0, $1, $2 и т.д. Также стоит отметить, то exactDestination="true" необходимо, в противном случае он перенаправляется /index.php/[controller]/[action]/[etc] к /[controller]/[action]/[etc]/index.php/[controller]/[action]/[etc]

я просто должен был добавить следующую секцию в верхней части web.config (в разделе <system.webserver> перед <rewrite> раздела:

<httpRedirect enabled="true" exactDestination="true" httpResponseStatus="Permanent"> 
    <add wildcard="/index.php/*" destination="/$0" /> 
</httpRedirect> 
Смежные вопросы