2014-09-08 11 views
0

Я сделал переписку apache2, так что корневой запрос "www.example.com" загружает содержимое из кеша, но все остальные запросы с параметрами обычно проходят через index.php"www.example.com/?action=1".RewriteRule для корневого пути

(пожалуйста, не комментируйте на подходе кэширования, так как это немного сложнее в реальном случае)

*** Vhost Confing file, NO.htaccess used *** 

     RewriteRule ^$ _cache/index.html [NC,L] #works on local only 
     # RewriteRule ^/$ _cache/index.html [NC,L] # 
     # RewriteRule ^index.php$ _cache/index.html [NC,L] #breaks normal requests 

     RewriteCond %{REQUEST_FILENAME} -s [OR] 
     RewriteCond %{REQUEST_FILENAME} -l [OR] 
     RewriteCond %{REQUEST_FILENAME} -d 
     RewriteRule ^.*$ - [NC,L] 
     RewriteRule ^.*$ /index.php [NC,L] 

Проблема заключается в том, что работал хорошо на моей машине .. но не работает на сервер. бот среды аналогичны:
местного - бродяга коробка с Ubuntu 13.04
сервера - Ubuntu 14.04 Конфигурации являются стандартными и подобно тому, как они работают только этот проект.

Я думаю, что есть некоторые изменения или определенные настройки, которые его нарушают, но не могут понять это.

ответ

1

Строка запроса не является частью запроса uri, который вы переписываете. Итак, если вы хотите, чтобы убедиться, переписывают происходит только на пустой строке запроса, Вам нужно добавить состояние:

RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^$ _cache/index.html [L] 

И тогда ваши регулярные правила.

0

Я кончался фиксируя это следующим образом:

# RewriteRule ^$ _cache/%{HTTP_HOST}.html [NC,END] 
    RewriteRule ^(|/|index.php)$ _cache/%{HTTP_HOST}.html [NC,L] 

    RewriteCond %{REQUEST_FILENAME} -s [OR] 
    RewriteCond %{REQUEST_FILENAME} -l [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule ^.*$ - [NC,L] 
    RewriteRule ^.*$ /index.php [NC,END] 

Не уверен, что зацикливание происходит, но END в последнем правиле фиксирует его. Я буду рад принять лучшее структурированное или объясненное решение.

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