2012-04-16 2 views
3

Хорошо, я немного оглянулся, и я не могу найти ответ.Очень продвинутый .htaccess

Теперь я не прошу вас дать мне только блок кода и сказать «это исправление», я хотел бы, чтобы вы объяснили, как вы это сделали, что вы придумали и т. Д. Мне бы хотелось узнать больше об этом, и единственный способ узнать - пример.

Теперь то, что мне нужно сделать, это:

В настоящее время мой блог (слово пресса идет цифра, потому что они владеют миром), находится на корневом каталоге. Итак, мои сообщения выглядят так: http://localhost/hello-world. Просто пример.

Однако, я только что расширил свой сайт с помощью специального скрипта PHP, использующего Code Igniter. Мне нужно поместить скрипт Code Igniter в корневой каталог и переместить блог в/main/or/blog /. Я не хочу избавляться от своего блога, но я не хочу, чтобы Google пересматривал каждый отдельный блог, или Google приводит к неправильным сообщениям. Что еще более важно, я не хочу сидеть здесь часами и часами, создавая перенаправляющие URL-адреса для каждого сообщения в блоге (их сотни).

Теперь мне нужно перенаправить перенаправление 301.

У меня проблема, с которой я столкнулся.

мне нужно иметь это в .htaccess:

RewriteEngine on 
RewriteCond $1 !^(index\.php|admin|css|img|js|main|favicon.ico) 
RewriteRule ^(.*)$ index.php/$1 [L] 

Это удаляет уродливые LOCALHOST/index.php/контроллер/контроллер-функции/

Но мне нужно, чтобы сделать мой .htaccess редирект все на /, но НЕ запрограммированные URL-адреса, которые у меня уже есть.

предустановку URL-адреса заданы параметры у меня есть через код воспламенитель являются:

/details/ 
/register/ 
/city/ 
/search_process/ 
/login/ 
/logout-success/ 
/login-success/ 
/logout/ 
/login/ 
/manage/ 
/panel/ 

Итак, по существу ..

локальный/привет-мир/придется 301 редирект на локальный/главная/привет-мир

и

локальный/(любой-оф-выше)/бы НЕ перенаправлять/основной/или/блог/

Также, если вы заметили в текущем .htaccess, я допустил некоторые вещи, например/admin// css// img// js/(/ main /), и favicon.ico (потому что это выглядит потрясающе)

Пожалуйста, изучите меня! (Как часто вы это слышите?: P)

CREDIT GOES TO LAWRENCE CHERONE!

Он изначально дал мне ответ, и между тем и сейчас я думаю, что я сделал опечатку в первый раз и случайно потерял код, и он не работал во второй раз после копирования/вставки я впервые набрал его, чтобы узнать его).

Итак, здесь идет модифицированное рабочее решение. Я полностью отдаю должное Лоуренсу Череу (парню, у которого есть принятый ответ на этот вопрос), потому что он помог мне разобраться в этом, и в конечном итоге я не смог бы получить это рабочее решение без него. Еще раз спасибо за бутон!

RewriteEngine on 
RewriteCond $1 !(panel|manage) 
RewriteRule ^(.*)$ http://localhost/choosefitness/main/$1 [R=301,L] 

RewriteEngine on 
RewriteCond $1 !^(index\.php|admin|css|img|js|less|favicon.ico) 
RewriteRule ^(.*)$ index.php/$1 [L] 

Это просто заявляет, что до тех пор, как первый аргумент http://localhost/choosefitness/first-argument нет/панели/или управления. Он должен 301 перенаправить на/main/(должен был предоставить полный URL-адрес для 301 перенаправления, а не только основной/$ 1)

Тогда он заявляет, что любой запрос, сделанный на admin css img js lss или favicon.ico, следует игнорировать. else должен быть сделан на index.php (это удаляет index.php из url в воспламенителе кода)

Я не знаю, почему это работает, я просто знаю, что это так. Однако я не тестировал его полностью, но я считаю, что у меня есть доступ к/css без перенаправления beign, вам нужно добавить | css в первый RewriteCond. Однако сервер может получить доступ к файлам css, не требуя этого.

+0

Примечание. ЛЮБЫЙ URL-адрес, не содержащийся в первом RewriteCond, не работает и будет отправлен в/main /. Таким образом, http: // localhost/choosefitness/css не будет работать, потому что это не в первом RewriteCond. Во-вторых, если аргумент URL не входит во второе условие, он не будет проигнорирован и будет действовать в отношении index.php. Таким образом, не имеет | css во втором RewriteCond, но его в первом RewriteCond будет действовать так, как если бы http: //localhost/choosefitness/index.php/css, и действовать как аргумент Ignry Code. –

ответ

2

Это непроверенное & уверено, что index.php/$1/$2 неправильно, но ... Вы можете включить правило, которое соответствует вашим правилам CI, а затем перейти к контроллеру CI, и если не найдено совпадение, то переписать на свой /blog/ URL. Также не забывайте бежать. в части favicon\.ico.

RewriteEngine on 
RewriteCond $1 !^(index\.php|admin|css|img|js|main|favicon\.ico) 

RewriteRule ^(details|register|city|search_process|login|logout-success|login-success|logout|login|manage|panel)/(.*)$ index.php/$1/$2 [L] 
RewriteRule ^(.*)$ /blog/$1 [L] 

Edit: Если параметр находится на передней панели, затем включите правило на что-то вроде этого:

RewriteRule ^(.*)/(details|register|city|search_process|login|logout-success|login-success|logout|login|manage|panel)$ index.php/$1/$2 [L] 
+0

OK близко. Это то, что у меня есть: RewriteRule^(подробнее | register | city | search_process | login | logout-success | login-success | logout | login | manage | panel) (. *) $ ./index.php/$1 [L] То, что я изменил. Теперь он делает запросы на /blog/index.php/panel –

+0

Не найдено Запрашиваемый URL /blog/index.php/panel не был найден на этом сервере. –

+0

Какой url вы пытаетесь использовать: что-то вроде './City/bla' попадет в правило CI, в то время как'./Something/bla' ударит по URL-адресу блога, похоже, вы пытаетесь './index.php/ панель ', которая не соответствует вам, нужно использовать'./panel/'забыть часть' index.php'. –

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