У меня есть сборка приложений на основе CodeIgniter и приложение, работающее на IIS7.5 в Windows Server 2008 R2 Standard.
У нас также есть 4 отдельные базы данных, по одной на каждое рабочее состояние, которое работает на том же сервере. (Я знаю, вероятно, не лучшую практику, но это то, что мне дали работать. Я не был оригинальным дизайнером).
Таким образом, моя структура папок выглядит следующим образом и дублируется для каждого состояния.
wwwroot/
|
|-{STATE}/
|----|index.php //CI Index.php
|-{STATE}/
|----|index.php //CI Index.php
Папки состояния — это каталоги с именами, написанными заглавными буквами.
в каждой папке есть файл web.config для перезаписи запросов uri в index.php
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpErrors errorMode="Detailed" />
<asp scriptErrorSentToBrowser="true" />
<rewrite>
<rules>
<rule name="RuleRemoveIndex" stopProcessing="true">
<match url="^(.*)$" ignoreCase="true" />
<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="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
теперь вот где я запутался.
Приложение иногда работает, а иногда не работает, в зависимости от погоды, компонент состояния (https: // {SUB}. {DOMAIN}: {PORT} / {STATE} / {URI}) записан прописными буквами или нет.
Когда я изначально поставил его на сервер, я проверил его строчными буквами {состояние}, и все работало нормально. Я вернулся на следующий день и обнаружил, что использование строчных букв даст мне ошибку CodeIgniter 404. Но если бы я использовал заглавные буквы {STATE}, это бы сработало. и тогда это изменится позже.
после выполнения некоторого тестирования URL-адреса здесь, используя те же принципы: http://www.iis.net/learn/extensions/url-rewrite-module/creating-rewrite-rules-for-the-url-rewrite-module
но поменял на php, заметил что
Я также провел тестирование URL REWRITE, чтобы увидеть результаты URL Rewrites, основываясь на версии aspx: http://www.iis.net/learn/extensions/url-rewrite-module/creating-rewrite-rules-for-the-url-rewrite-module
но поменял на php. Я обнаружил, что $ _SERVER [‘SCRIPT_NAME’] сохранял первый способ, которым тип {STATE} был типом (заглавными или строчными). Мое временное исправление — это то, что я уверен, плохая практика,
Я добавил этот скрипт в начало моего файла index.php
$_script_name = $_SERVER['SCRIPT_NAME'];
$_script_name_array = explode('/', $_script_name);
$_script_name_array[1] = strtolower($_script_name_array[1]);
$_script_name = implode('/', $_script_name_array);
$_SERVER['SCRIPT_NAME']=$_script_name;
которая наполовину исправила проблему, она в основном заставляет использовать состояния в нижнем регистре.
Было бы хорошо, если бы решение было найдено так, чтобы не имело значения, написано ли {состояние} заглавными буквами или нет.
Я надеялся, что кто-то здесь может иметь какую-то идею.
IIS Rewrite будет полезен в этом случае
Добавьте следующий код в файл web.config, расположенный в корне вашей веб-папки.
<rule name="LowerCaseRule" stopProcessing="true">
<match url="[A-Z]" ignoreCase="false" />
<action type="Redirect" url="{ToLower:{URL}}" />
</rule>
Вот URL переписать Вы можете найти более подробную информацию об этом.
Надеюсь, что это поможет вам.
Других решений пока нет …