2013-08-06 5 views
1

У меня есть две разные вещи, которые я хочу выполнить в случае двух разных типов URI, но я не могу остановить второй случай от выполнения, когда первый случай уже принят.htaccess RewriteCond REQUEST_URI обнаружение не работает

Вот пример:

abc.com 
abc.com/asdf 
abc.com/en/asdf 
abc.com/zh-cn/asdf/asdf 

все должны быть направлены на этот RewriteRule:

RewriteRule ^(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /index.php?lng=$1&tpl=$4 [QSA,L,NC] 

Часть 2:

abc.com/myadmin/ 
abc.com/myadmin/asdf 
abc.com/myadmin/en/asdf 
abc.com/myadmin/zh-cn/asdf/asdf 

все должны быть направлены на этот RewriteRule:

RewriteRule ^myadmin/(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /myadmin/index.php?lng=$1&tpl=$4 [QSA,L,NC] 

Пути я пытаюсь достигнуть этого является укладкой условия, как это:

RewriteCond %{REQUEST_URI} !^/myadmin/ 
RewriteRule ^(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /index.php?lng=$1&tpl=$4 [QSA,L,NC] 

RewriteCond %{REQUEST_URI} ^/myadmin/ 
RewriteRule ^myadmin/(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /myadmin/index.php?vlng=$1&tpl=$4 [QSA,L,NC] 

Но независимо от того, что я делаю, как правила по-прежнему выполнять. Возможно, я делаю это правильно, а вторичный кадр происходит дальше в шаблонах php, я не уверен. Мне просто нужно знать, хорошо ли то, что я сделал, хорошо.

ответ

0

Ok Я нашел эту проблему, она была и моя ошибка при допуске Clear Cache extensio n в моем браузере Chrome работал только на одной вкладке за раз и по умолчанию в этом расширении, что автоматически перезагружает все вкладки после активации расширения..

Как и большинство разработчиков, у меня есть от 5 до 10 вкладок, открытых в моем браузере в любой момент, при разработке для доступа к областям тестирования моего сайта, инструментам разработки и техническим ресурсам. Когда я работаю над кодом, я обычно делаю всю очистку кеша вручную лично, так что я знаю, что это действительно так, в этом случае я решил добавить новое расширение в свой браузер Chrome под названием «Clear Cache», чтобы помочь мне позаботиться об этом немного быстрее, потому что я делал много небольших изменений, которые мне требовались, чтобы делать чистые тесты каждый раз. Я не понял, что при активации расширения он также очищает кеш всех остальных вкладок. Я также не заметил настройки по умолчанию, которые установлены для автоматической перезагрузки их после очистки. Поскольку он также не показывает вам, что он перезагружает все эти другие вкладки визуально, я понятия не имел, что это была перезагрузка вкладки, которую я открыл на главной странице сайта, над которым я работал, отвечал за загрузку файлов cookie.

Чтобы подвести итог, когда я работал на своем сайте, на одной вкладке, тестируя изменения в моей области администрирования, я продолжал видеть обновления файлов cookie, которые могли появляться только с публичной стороны моего сайта, и это продолжало заставлять меня думать, что что-то еще не так с моими изменениями htaccess.Я понял, что после двух дней устранения неполадок удобное расширение dandy, которое я добавил, чтобы облегчить задачу, - это фактически перезагрузка всех вкладок в моем браузере, не сообщив мне об этом, и все эти другие вызовы несут ответственность за постоянный возврат файлов cookie, которые могли бы только генерируется публичной стороной моего сайта, которая меня сбивает с толку. После этого я вернусь к очистке своего кеша вручную.

1

Заменить это условие:

RewriteCond %{REQUEST_URI} !^/myadmin/ 

С этими 2:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

Собираем все вместе:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^myadmin/(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /myadmin/index.php?vlng=$1&tpl=$4 [QSA,L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /index.php?lng=$1&tpl=$4 [QSA,L,NC] 
+0

Это не похоже на мою проблему, даже если я удаляю второй набор условий и жестко кодирую свой URI в/myadmin/dir, он по-прежнему вызывает мой файл /index.php в корневом каталоге сервера. Правильно ли работает RewriteBase/критический в вашем примере? Я никогда раньше не требовал этого. – Vince

+0

Сначала вы должны убедиться, что выше .htaccess находится непосредственно под DOCUMENT_ROOT. Pls сбрасывает ваш полный .htaccess в ваш вопрос и рассказываю мне, для какого URI этот код не работает, чтобы я мог также проверить с моего конца. – anubhava

+0

Полный файл .htaccess имеет длину почти 260 строк и находится в DOCUMENT_ROOT. Если я использую код, который вы предложили выше, пытаясь получить доступ к моей области администрирования, другой RewriteRule также выполняется, и я могу сказать, потому что в другом правиле указывается код, который обновляет файлы cookie, найденные в публичной части моего сайта. Единственный способ остановить обновление файлов cookie - удалить вторую часть кода, который вы разместили выше, что нарушает публичную часть моего сайта. Мне нужен другой способ сделать это, что не позволит выполнять оба условия. – Vince

Смежные вопросы