2013-10-26 5 views
0

У меня есть сайт, который я пытаюсь разработать, и у меня есть некоторые проблемы (возможно, noob), чтобы мои правила reWrite работали правильно.У меня проблемы с RewriteRule

В основном, я использую рамки CodeIgniter для разработки сайта и как часть этого я создал RewriteRule, чтобы удалить index.php часть URL, за исключением некоторых папок для изображений и т.д.

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|shop) 
RewriteRule ^(.*)$ /TESTSite/index.php/$1 [L] 

Сайт первоначально имеет текущую страницу page/facilities/our-shop, которая была очень простой страницей с несколькими ссылками на paypal, чтобы сделать очень грубую страницу магазина, так как нам нужно было быстро. Однако теперь я внедрил другой раздел (читаем OpenCart), чтобы сделать его более профессиональным и предоставить больше возможностей и т. Д. Я поместил openCart в подкаталог под названием shop. Магазин продолжает работать правильно, поскольку я исключил /shop из моего первоначального правила reWrite.

Однако - Моя проблема ... Я хочу старую страницу page/facilities/our-shop для перенаправления на /shop и, следовательно, работать, как если бы я перемещаться прямо там ..

Я попытался следующие:

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|shop) 
RewriteRule ^page/facilities\/our-shop$ /TESTSite/shop/$1 [R,NC,L] 
RewriteRule ^(.*)$ /TESTSite/index.php/$1 [L] 

И

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|shop) 
RewriteRule ^page/facilities\/our-shop$ /TESTSite/shop/$1 [N] 
RewriteRule ^(.*)$ /TESTSite/index.php/$1 [L] 

И несколько других вариантов, но каждый раз, когда я не могу заставить его работать. Может ли кто-нибудь посоветовать, пожалуйста?

Благодаря

ответ

2

Я думаю, вы можете попробовать следующие правила:

RewriteEngine on 
RewriteRule TESTSite/page/facilities/our-shop$ /TESTSite/shop/$1 [R=301] 

RewriteCond %{REQUEST_URI} !^(index\.php|images|css|js|robots\.txt|shop) 
RewriteRule ^TESTSite/page/(.*)$ /TESTSite/index.php/$1 [L] 

Две вещи:

  • При использовании RewriteCond, это относится только к следующему правилу. Поэтому я повторно заказал две строки.
  • Не нужно \ до / в правиле.

Отметьте this tool, чтобы отладить ваши правила.

+0

Спасибо Гийом, я ценю ответ и помощь. К сожалению, это, похоже, не делает то, что я ожидал. Страница все еще остается на оригинальной (старая страница). Я ввел данные в этот инструмент вы предложили, и это дает следующее: 'запрос = HTTP: // локальный/тестовый сайт/страница/Услуги/наш-shop' ' .htaccess = RewriteEngine на RewriteRule^страница/услуги/наш магазин $/TESTSite/shop/$ 1 [R = 301] RewriteCond $ 1!^(index \ .php | images | css | js | robots \ .txt | shop) RewriteRule^(. *) $ /TESTSite/index.php/$1 [L] ' ' Выходной URL = http: // localhost/TESTSite/page/facilities/our-shop' – FireEnigmaX

+0

Отладочные данные на этом сайте показывают, что строки 1 и 2 выводят строки (строка 3 пустая), строка 4 дает: 'RewriteCo nd $ 1!^(index \.php | images | css | js | shop) \t Эта переменная не поддерживается: $ ' Является ли проблема, что у меня есть $? Должно ли это быть чем-то другим? Строка 5 говорит: «Это правило не выполнялось, потому что одно из условий не было выполнено» – FireEnigmaX

+0

Вы правы, ответ отредактирован. Извините, забыл о вашей корневой папке. –

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