Преобразование кода Gallery3 .htaccess mod_rewrite в IIS URL Rewrite в Web.config - PullRequest
1 голос
/ 21 января 2012

У меня есть веб-сайт, на котором я установил Gallery3.URL-адрес

 http://techblog.lalsofttech.com/gallery/

Но когда я открываю «тестовый альбом», в URL-адресе появляется index.php

http://techblog.lalsofttech.com/gallery/index.php/test

Теперь я хочу удалить index.phpиз URL и хочу, чтобы URL выглядел следующим образом

 http://techblog.lalsofttech.com/gallery/test

Поскольку мое общее серверное пространство представляет собой платформу Windows с IIS 7, я не могу использовать файл .htaccess.Поскольку на моем сервере установлен модуль Microsoft URL Rewrite, мне нужно написать правило перезаписи в файле web.config.

Это код для скрытия index.php в файле .htaccess

 <IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteBase /gallery
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?kohana_uri=$1 [QSA,PT,L]
  RewriteRule ^$ index.php?kohana_uri=$1 [QSA,PT,L]
  RewriteRule ^index.php/(.*) $1 [QSA,R,L]
 </IfModule>

Я попытался преобразовать это, установив модуль перезаписи URL-адресов Microsoft на мой локальный хост.

За исключением «RewriteBase / gallery», все остальные коды преобразуются. «RewriteBase / gallery не преобразуется, поскольку он не поддерживается IIS», - это сообщение об ошибке, которое я получил.И это преобразованный код.

<rewrite>
<rules>
<rule name="Imported Rule 1" stopProcessing="true">
  <match url="^(.*)$" ignoreCase="false" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
  </conditions>
  <action type="Rewrite" url="index.php?kohana_uri={R:1}" appendQueryString="true" />
</rule>
<rule name="Imported Rule 2" stopProcessing="true">
  <match url="^$" ignoreCase="false" />
  <action type="Rewrite" url="index.php?kohana_uri={R:1}" appendQueryString="true" />
</rule>
<rule name="Imported Rule 3" stopProcessing="true">
  <match url="^index.php/(.*)" ignoreCase="false" />
  <action type="Redirect" redirectType="Found" url="{R:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>

Но, похоже, этот код не работает, так как index.php все еще там.Модуль перезаписи URL-адреса ISS работает, поскольку другое правило «Принудительное использование канонического имени хоста», которое я добавил в файл web.config, работает правильно.

Это мой полный файл web.config.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <system.webServer>
  <directoryBrowse enabled="false" />
  <rewrite>
  <rules>
    <rule name="Enforce canonical hostname" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
        <add input="{HTTP_HOST}" negate="true" pattern="^www\.moviega\.com$" />
      </conditions>
      <action type="Redirect" url="http://www.moviega.com/{R:1}" redirectType="Permanent" />
    </rule>
    <rule name="Imported Rule 1" stopProcessing="true">
      <match url="^(.*)$" ignoreCase="false" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
      </conditions>
      <action type="Rewrite" url="index.php?kohana_uri={R:1}" appendQueryString="true" />
    </rule>
    <rule name="Imported Rule 2" stopProcessing="true">
      <match url="^$" ignoreCase="false" />
      <action type="Rewrite" url="index.php?kohana_uri={R:1}" appendQueryString="true" />
    </rule>
    <rule name="Imported Rule 3" stopProcessing="true">
      <match url="^index.php/(.*)" ignoreCase="false" />
      <action type="Redirect" redirectType="Found" url="{R:1}" appendQueryString="true" />
    </rule>
  </rules>
</rewrite>
</system.webServer>
</configuration>

Так в чем же проблема ??Что нужно сделать, чтобы удалить index.php из URL?Пожалуйста, помогите мне разобраться с этим.

Ответы [ 2 ]

0 голосов
/ 28 января 2012

Хорошо, я поясню, для тех, кто устанавливает галерею 3 в Windows Server с IIS7. и пытаемся избавиться от файла index.php из URL.

1-й: Сохраните ваш файл web.config с правилами перезаписи в каталоге, в который вы устанавливаете галерею, а не в корне вашего сайта

2-й: правила перезаписи файла web.config, который вы помещаете в папку галереи, должны быть такими:

<?xml version="1.0" ?>
<configuration>

<system.webServer>

<rewrite>
 <rules>
   <rule name="Imported Rule 1" stopProcessing="true">
     <match url="^(.*)$" ignoreCase="false" />
     <conditions>
       <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
       <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
     </conditions>
     <action type="Rewrite" url="index.php?kohana_uri={R:1}" appendQueryString="true" />
   </rule>
   <rule name="Imported Rule 2" stopProcessing="true">
     <match url="^()$" ignoreCase="false" />
     <action type="Rewrite" url="index.php?kohana_uri={R:1}" appendQueryString="true" />
   </rule>
   <rule name="Imported Rule 3" stopProcessing="true">
     <match url="^index.php/(.*)" ignoreCase="false" />
     <action type="Redirect" redirectType="Found" url="{R:1}" appendQueryString="true" />
   </rule>
 </rules>
</rewrite>

</system.webServer>
</configuration>

Надеюсь, это будет полезно для тех, кто сталкивается с такими же проблемами, как та, с которой я столкнулся ..

0 голосов
/ 27 января 2012

Это может быть связано с тем, где 1 вы размещаете этот файл Web.config. Пока он находится в подкаталоге http://www.MovieGa.com/gallery/, я думаю, что он должен работать ...!

EDIT: В ответ на ваш второй вопрос, возможно, причина этой ошибки:

Это связано с этой частью:

<rule name="Imported Rule 2" stopProcessing="true">
  <match url="^$" ignoreCase="false" />
  <action type="Rewrite" url="index.php?kohana_uri={R:1}" appendQueryString="true" />
</rule>

С .htaccess, Я думаю, что это работает нормально. Но с Web.config выдает эту ошибку, потому что 2 пытается найти группы захвата в регулярном выражении, в то время как в данном конкретном разделе <match url="^$"> их нет. Если вы удалите эту ?kohana_uri={R:1} деталь из url="", она будет работать?

Справка:

1 http://forums.iis.net/t/1162232.aspx (комментарий Анила Руиа)

2 http://forums.iis.net/t/1150904.aspx (второй комментарий Руслани)

...