2013-05-16 1 views
0

Я имею следующую структуру папок:.htaccess Multiple подкаталог переписывания к WWW-корень

  • WWW-корень
    • Backend
      • Config
      • Etc
    • Frontend
      • Администрация
      • StoreFront

Я хотел бы иметь возможность доступа к каталогам из основного URL и скрывая подкаталоги между ними.

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

http://localhost/Administration/ 

Главная страница, которая хранится в подкаталоге «StoreFront», я хочу, чтобы иметь возможность доступа от корня:

http://localhost 

Это код в моем файле .htaccess до сих пор:

# Store Redirect 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^localhost [NC] 
RewriteCond %{REQUEST_URI} !^/Frontend/StoreFront 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /Frontend/StoreFront/$1 
RewriteCond %{HTTP_HOST} ^localhost [NC] 
RewriteRule ^(/)?$ /Frontend/StoreFront/index.php [L] 
RewriteCond %{REQUEST_URI} !^/Administration 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /Frontend/Administration/$2 

Этот код, как никогда не работает правильно. Он переписывает каждый файл, кроме файла index.php, в подкаталог администрирования. Одностороннее примечание: php-файлы, которые находятся в backend-каталоге, должны оставаться «включенными» из интерфейса.

ответ

1

Позвольте мне рассказать вам, что вы пытаетесь достичь: Миссия невозможна, теперь позвольте мне сказать вам, почему. У вас есть правило:

RewriteRule ^(.*)$ /Frontend/StoreFront/$1 

и дальше вниз у вас есть:

RewriteRule ^(.*)$ /Frontend/Administration/$2 

Вы не можете иметь .* собирается оба места. Вам нужно как-то отличить эти 2 пути.

Это, кроме того, что у вас есть другие проблемы также, например:

  1. Не используя L флаг (последний), где требуется
  2. Использование $2 вместо $1 во 2-ом правиле

EDIT: По вашему мнению:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteRule ^(Administration(?:/.*|))$ /Frontend/$1 [L,NC] 

RewriteCond %{HTTP_HOST} ^localhost [NC] 
RewriteRule ^$ /Frontend/StoreFront/index.php [L] 

RewriteCond %{HTTP_HOST} ^localhost [NC] 
RewriteCond %{REQUEST_URI} !^/Frontend/StoreFront 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /Frontend/StoreFront/$1 [L] 
+0

Для второго я просто хочу переписать каталог администрирования в '/ Frontend/Administration /'.Я не хочу переписывать каждый файл в каталоге администрирования в корневой каталог. Только сам каталог. Итак, 'http: // localhost/Administration' на самом деле есть:' http: // localhost/Frontend/Administration/'и, следовательно, в браузере отображается как' http: // localhost/Administration'. – Martin

+1

Хорошо, я дам свой ответ на основе этого. – anubhava

+0

Спасибо! Я очень благодарен. Тем не менее, у меня есть одна небольшая проблема. Если я не стану слэш после администрирования, я получаю 404. Таким образом, 'http: // localhost/Administration' создает 404, но' http: // localhost/Administration/'этого не делает. – Martin