Codeigniter 2 на IIS с файлом web.config - PullRequest
7 голосов
/ 23 марта 2011

У меня есть приложение codeigniter, работающее локально с WAMP. Однако у меня возникли проблемы с его работой на сервере IIS. Обратите внимание, что я не хочу включать строки запроса.

Вот что у меня есть в файле web.config:

    <?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Clean URL" stopProcessing="true">
                    <match url="^(.*)$" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php/{R:1}" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>  

Это приводит к правильной загрузке главной страницы: www.website.com/policies

Однако, когда я нажимаю на элемент, чтобы перейти на: www.website.com/policies/policy/view/31

Соответствующая страница не отображается. Главная страница продолжает отображаться.

Контроллер - это Policy, а функция - view (). Файлы Codeigniter находятся в политике / папке на сервере.

Я думаю, что проблема может быть в моем файле web.config. $ Config ['base_url'] файла конфигурации рассчитывается динамически и является правильным. $ Config ['index_page'] файла конфигурации пуст. Как вы думаете, что вызывает эту проблему?

Спасибо всем за помощь.

Ответы [ 5 ]

31 голосов
/ 23 марта 2011

Вы смотрели пример на форумах CI?

http://codeigniter.com/forums/viewthread/91954

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Rewrite to index.php">
                    <match url="index.php|robots.txt|images|test.php" />
                    <action type="None" />
                </rule>
                <rule name="Rewrite CI Index">
                    <match url=".*" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" pattern="css|js|jpg|jpeg|png|gif|ico|htm|html" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php/{R:0}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>  
3 голосов
/ 03 ноября 2014

Я поместил следующий код web.config в корень, и он работал отлично.

<?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <rule name="Imported Rule 1" stopProcessing="true">
                        <match url="^(.*)$" ignoreCase="false" />
                        <conditions logicalGrouping="MatchAll">
                            <add input="{URL}" pattern="^system.*" ignoreCase="false" />
                        </conditions>
                        <action type="Rewrite" url="/index.php?{R:1}" />
                    </rule>
                    <rule name="Imported Rule 2" stopProcessing="true">
                        <match url="^(.*)$" ignoreCase="false" />
                        <conditions logicalGrouping="MatchAll">
                            <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                            <add input="{R:1}" pattern="^(index\.php|images|robots\.txt|css)" ignoreCase="false" negate="true" />
                        </conditions>
                        <action type="Rewrite" url="index.php?{R:1}" />
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>
2 голосов
/ 05 марта 2013

Уфф !!!Ой!Боже мой !!!

Недавно я сделал панель управления админкой с CI и бакалейной крушкой.Он отлично работал с WAMP на моем локальном сервере с красивым URL и перенаправлением.Я говорил о том, что CI - лучшая структура, в которой я когда-либо работал.Это так просто в использовании и очень хорошо задокументировано!в CodeIgniter.

Но когда я перенес свою админ-панель на IIS-сервер 7.XX, кажется, мой кошмар начинается.Все останавливалось. Без перенаправления, без отображения ошибок, ничего не происходило.Мне было так страшно, почему это происходит.Копаю гугл, переполнение стека, CI форум почти 6 часов.Я ничего не получил нигде.Мне было так грустно: (

Я не могу думать, что мне следует делать. Тогда я обрел спокойствие и успокоился и начал шаг за шагом пересматривать все, что здесь:

1.  Set error reporting on
2.  Check php info
3.  Check redirect/rewrite
4.  Check mysql/mysqli extension loaded or not in IIS server
5.  Converted my .htaccess file rule with web.config rule (Really helped me)
6.  Put web.config file in main directory (CI working folder) not in root folder

Как преобразовать .htaccess в web.config?

Затем я обнаружил, что все правильно, за исключением того, что расширение «mysqli» не было загружено на IIS Server и мои учетные данные конфигурации базы данных были неправильнымиЗатем я внес изменения в php.ini (проверьте 'phpinfo ()', чтобы найти путь php.ini на IIS Server), строку № 881 с расширением uncomment = php_mysqli.dll.

Вот мои настройки конфигурации CI:

$config['base_url'] = '';
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';

После этого, снова откройте мою административную панель CI !!!!!! Все вау !! вау !! работает как шарм :) хе хе ...Я был так счастлив :):)

Вот мой файл web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Imported Rule 1">
                    <match url="(.*)" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{HTTPS}" pattern="off" ignoreCase="false" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}{URL}" redirectType="Found" />
                </rule>
                <rule name="Imported Rule 1-1" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{URL}" pattern="^system.*" ignoreCase="false" />
                    </conditions>
                    <action type="Rewrite" url="index.php?/{R:1}" appendQueryString="false" />
                </rule>
                <rule name="Imported Rule 2" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{URL}" pattern="^application.*" ignoreCase="false" />
                    </conditions>
                    <action type="Rewrite" url="/index.php?/{R:1}" appendQueryString="false" />
                </rule>
                <rule name="Imported Rule 3" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <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?/{R:1}" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Вот мой красивый тип URL

https://mysite.abc.com/administrator/admin/showUsers

administrator is my  admin folder

admin is my controller

and showUsers in my controller method

Надеюсь, мой неудачный опыт будетпомогите кому-нибудь :) 1027 *

2 голосов
/ 25 сентября 2012

Оказывается, у меня не была установлена ​​программа перезаписи. Это сделало трюк:

http://www.iis.net/downloads/microsoft/url-rewrite

Я не уверен, что страница ошибки codeigniter, возможно, несколько замаскировала ошибку, потому что я не мог определить, что она не была установлена ​​с экрана ошибки браузера. Кроме того, средства просмотра событий, журналы IIS и журналы PHP не помогли в этой ситуации.

0 голосов
/ 26 октября 2016
You can like this,
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <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>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...