2013-09-12 7 views
2

У меня есть простой локальный сайт с этой структурой каталогов:Htaccess - каталог карты в URL-адрес и каталог скрыть имя

/ 
    test2/ 
     .htaccess 
     bootstrap.php 
     git-service/ 
      bootstrap.php 

Что я пытаюсь выполнить в том, что, когда пользователь запрашивает www.example. com/test2/git/он получает содержимое каталога git-service, а если он пытается запросить каталог git-service напрямую (www.example.com/test2/git-service/), этот запрос рассматривается как нормальный запрос (например, заданный как значение GET для основного теста2/bootstrap.php).

Что я сделал, теперь это:

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase /test2 

RewriteCond %{HTTP_HOST} ^www\.example\.com$ 
RewriteCond %{REQUEST_URI} ^/test2/git($|/.*$) 
RewriteRule . /test2/git-service/bootstrap.php?request=GIT [L] 

RewriteCond %{HTTP_HOST} ^www\.example\.com$ 
RewriteCond %{REQUEST_URI} ^/test2/git-service($|/.*$) 
RewriteRule . /test2/bootstrap.php [L] 

Проблема заключается в том, что и/test2/мерзавец, и/test2/запросы ГИТ-службы передаются в основной файл bootstrap.php (test2/самозагрузки .php). Если я закомментирую второй блок (тот, который обрабатывает запросы git-service), то поведение правильное, что означает, что запросы test2/git корректно передаются в файл git-service/bootstrap.php. Но когда я активирую вторую часть, те же запросы на test2/git/как раньше передаются в основной файл test2/bootstrap.php.

Как сторона не, рассуждение позади всего этого заключается в том, что я пытаюсь отделить фактическое имя каталога от запросов, сделанных для его получения и его содержимого.

спасибо, что заранее.

==== ==== EDIT

Спасибо большое, анубхава, ваше предложение работал очень хорошо, хотя и нуждается незначительные изменения, так как сервер продолжал давать мне 404 ошибки при запросе GIT/страниц (страницы git-service были правильно отображены).

код, который работал для меня это:

Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase /test2/ 

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] 
#RewriteRule ^git(/.*|)$ git-service/bootstrap.php?request=GIT [L,NC] 
RewriteCond %{REQUEST_URI} ^/test2/git(|/.*)$ 
RewriteRule . /test2/git_service/bootstrap.php?request=GIT [L] 

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] 
RewriteRule ^git-service(|/.*)$ bootstrap.php [L,NC] 

По некоторым причинам я не могу удалить вторую RewriteCond линию, и я не могу заменить все сопрягая точку в первом RewriteRule с фактическим состоянием, или Я получаю 404 ошибки.

ответ

2

Иметь свой код так:

Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase /test2/ 

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] 
RewriteRule ^git(/.*|)$ git-service/bootstrap.php?request=GIT [L,NC] 

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] 
RewriteRule ^git-service(/.*|)$ bootstrap.php [L,NC] 
Смежные вопросы