У меня есть CodeIgniter проект в папке b1 в моем public_html папку:Can 2 .htaccess файлы блокировать URL переписывания
mydomain.com/b1/controller/function
Я хочу изменить его на:
mydomain.com/controller/function
в строке браузера используя 301 перенаправление.
Мой файл .htaccess в моем public_html есть:
RewriteEngine on
RewriteRule ^b1/(.*)$ /$1 [R=301,L,NC]
RewriteRule ^(.*)$ b1/$1
EXPLANATION:
RewriteRule ^b1/(.*)$ /$1 [R=301,L,NC] # THIS IS TO REWRITE ALL REQUESTS FROM THE NAVBAR IN MY PROJECT WHICH HAVE THE FORM mydomain.com/b1/controller/function TO mydomain.com/controller/function. AFTER THIS THE NAVBAR SHOULD SHOW mydomain.com/controller/function (I ASSUME)
RewriteRule ^(.*)$ b1/$1 # THIS IS TO TAKE ALL INCOMING REQUESTS AND ADD A b1 IN FRONT SO mydomain.com/controller/function IS REDIRECTED TO mydomain.com/b1/controller/function - BUT INTERNALLY, SO THAT THE BROWSERS ADDRESS BAR STILL SHOWS A 'PRETTIER' mydomain.com/controller/function
Согласно http://htaccess.madewithlove.be/, это должно работать, но я все еще вижу:
mydomain.com/b1/controller/function
в моей адресной строке.
Обратите внимание, что это проект codeigniter, а CI имеет следующий файл .htaccess. (Опять же проект находится в моем public_html директории/b1)
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
Насколько я могу сказать, mod_rewrite работает, потому что RewriteRule^(. *) $ B1/$ 1 работ, когда матч к правилу над ним не происходят.
Возможно, некоторая комбинация файлов с 2-х х х х кэшем вызывает отсутствие видимой перезаписи в адресной строке? Я хотел бы отладить это и выяснить, как достичь формата URL, рассмотренного выше.
Спасибо,
Билл
Дополнение: благодаря всем для своих попыток. то, что я замечаю из нескольких ответов, заключается в следующем:
RewriteRule ^b1/(.*)$ /$1 [R=301,L,NC]
RewriteRule ^(.*)$ b1/$1 [L]
Их, кажется, много L-флагов. В псевдокоде, что я хочу достичь, это:
IF REQUEST is mydomain.com or www.mydomain.com (with nothing after the /) rewrite to mydomain.com . FIRST REWRITE TO REMOVE B1 IF EXISTS (this is for the navbar requests which have form: mydomain.com/b1/controller/function which should be rewritten to mydomain.com/controller/function) so that the address bar shows mydomain.com/controller/function
если Theres в L выше, я не думаю, что он будет работать
Then add b1 back in internally so you redirect to b1 folder where project is stored
Помещенные 'RewriteOptions inherit' в верхней части нижнего уровня' .htaccess' файл. –
это вызывает ошибку сервера 500 – user61629
Опасность угадывания: 'RewriteRule. * Index.php/$ 0 [PT, L]', 'L' означает: не обрабатывать никаких дополнительных правил (и« более глубокий ».htaccess работает до тот, который находится в вашем документе root). Не могли бы вы попробовать без этого 'L'? – Wrikken