2014-09-03 3 views
1

Я создал новую функцию с надеждой на получение панировочных сухарей и лучшую структуру URL.Исключить несколько путей из правила перезаписи htaccess

До этого я имел следующее правило:

RewriteRule ^pages/([a-z0-9,&-]+)/?$ ?action=viewArticleName&page_identifier=$1 [L,NC,QSA,B] 

Это означало;

www.example.com/pages/contact 

возвратил статью из БД. Теперь я хотел бы изменить это так, мои URLs выглядеть

www.example.com/categoryname/pagename 

поэтому мое рабочее правило, переписывают для этого:

RewriteRule ^([^/]+)/([^/]+)$ /?action=viewCategoryName&categoryName=$1&page_identifier=$2 [L] 

Проблема заключается в RewriteRule вызывает какие-либо изображения включаются с/изображений для загрузки включен шаблон для статьи.

я могу думать о трех возможных решений, но не фактический код:

1) Могу ли я создать массив имен категории? Тогда я мог бы сделать RewriteRule применимым только к этим именам.

2) Создайте класс, содержащий некоторые глобальные настройки. В этом есть некоторый php, который определяет или задает путь изображения. Все, о чем я могу думать;

define("IMAGE_PATH", "//example.com/images"); 

3) Добавьте что-то в файл Htacces, чтобы исключить определенные пути из правила.

Я знаю, что MVC или подобное достижение достигнут гораздо лучших результатов. Это о моем обучении, пожалуйста, скажите мне, если я выкопал себя в дыру здесь!

Большое спасибо, Adam

ответ

1

Вы можете пропустить все существующие файлы и каталоги от этого переписывания как это, чтобы предотвратить все изображения получать поражаются этим новым правилом:

# skip all existing files 
RewriteCond %{REQUEST_FILENAME} !-f 
# skip all existing directories 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)/?$ /?action=viewCategoryName&categoryName=$1&page_identifier=$2 [L,QSA,B] 

NB, добавил " B 'в флаги, это ускользает от букв без буквенно-цифровых символов, таких как' & '.

+1

это работало идеально! Не могли бы вы объяснить, какая часть кода заставляет его пропускать все существующие файлы/каталоги? – atoms

+1

Я добавил несколько комментариев в свой ответ. В основном '% {REQUEST_FILENAME}! -f' означает, что это не файл, а'% {REQUEST_FILENAME}! -d' означает, что запрос не для каталога. – anubhava

+1

отлично работает, спасибо за разработку, отметит ваш комментарий – atoms

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