Перенаправление папки в другую папку в обход других правил .htaccess

#php #apache #.htaccess #codeigniter #mod-rewrite

#php #apache #.htaccess #codeigniter #мод-перезапись

Вопрос:

У меня есть корневая папка моего веб-сайта с существующим веб-сайтом. Я разработал систему администрирования на основе codeigniter, которую я хочу опубликовать в папке / editor, однако все выполненные мной изменения mod_rewriting кажутся напрасными, поскольку, если что-либо перезаписывается, оно не может получить доступ к входной строке или index.php появится файл. Вот структура:

 /
    /editor
        index.php
        .htaccess
    index.php
    .htaccess
  

Вот мой текущий файл .htaccess в корне сайта:

 DirectoryIndex index.php

RewriteEngine On

RewriteRule  %{REQUEST_URI}^/?editor/(.*)$ (.*)/editor/$1 [R,L]

RewriteCond $1 ^$
RewriteRule ^(.*)$ ?p=homepage [L]

RewriteCond $1 !^(index.php|editor|css|pdf|eshot|js|fonts|images)
RewriteRule ^(.*)$ index.php/?p=$1 [L]
  

Редактировать

Это текущее правило отображает корневой index.php файл при переходе в подпапку /editor, в то время как он должен показывать index.php файл из папки /editor.

Повторное редактирование

Это может быть файл .htaccess во вложенной папке /editor, вот код из этого:

 DirectoryIndex index.php

RewriteEngine on
RewriteCond $1 !^(index.php|lib|robots.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
  

Ответ №1:

Хорошо, давайте рассмотрим это шаг за шагом.

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

 RewriteRule  %{REQUEST_URI}^/?editor/(.*)$ (.*)/editor/$1 [R,L]
  

Второе правило может быть сокращено до этого:

 RewriteRule ^/?$ ?p=homepage [L]
  

Третье правило можно переписать следующим образом:

 RewriteRule ^(?!(?:index.php|editor|css|pdf|eshot|js|fonts|images))([^/.] )/?$ index.php?p=$1 [L]
  

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

 DirectoryIndex index.php
RewriteEngine On
RewriteRule ^/?$ ?p=homepage [L]
RewriteRule ^(?!(?:index.php|editor|css|pdf|eshot|js|fonts|images))([^/.] )/?$ index.php?p=$1 [L]
  

Комментарии:

1. Привет, я думаю, что, возможно, я объяснил это немного неясно, пожалуйста, смотрите Мою правку для уточнения 🙂

2. К сожалению, это не работает. Может быть, это файл .htaccess в другой папке? Я опубликую это в своем вопросе.

3. Мне также не хватало ? во втором файле htaccess, который менял ваше последнее редактирование, сработало 🙂