2015-07-27 3 views
0

Ниже приведена отрывок из моего httpd.conf. Я хочу поймать все непревзойденные запросы на [2] и обратный прокси-сервер до http://localhost:8585. Тем не менее, все ссылки были отправлены http://localhost:8585/var/ww/html/Apache mod_rewrite catch all (. *) Не работает должным образом

DocumentRoot "/var/www/html" 

<Directory /> 
    Options FollowSymLinks 
    AllowOverride None 
    RewriteEngine on 
    RewriteRule testing/(.*) http://localhost:8585/mytesting/$1 [P,L] # [1] 
    RewriteRule (.*) http://localhost:8585/$1 [P,L] # [2] Catch all Rule 

</Directory> 

Вот некоторые испытания я попробовал и результат после переписывания

хорошего результата

http://localhost/testing/ =>http://localhost:8585/mytesting/ [3] http://localhost/testing/goodOne =>http://localhost:8585/mytesting/goodOne [4 ]

Bad Result

http://localhost:8080/testing =>http://localhost:8585/var/www/html/testing [5] Я ожидаю http://localhost:8585/testing

http://localhost:8080/ =>http://localhost:8585/var/www/html/ [6] Я ожидаю http://localhost:8585/

Проблема очевидна, что последний RewriteRule предваряется DocumentRoot (/ вар/WWW/HTML /) после того, как переписать. Я сделал что-то не так? Или это намеченное поведение? И как я могу исправить/переделать это, чтобы получить ожидаемый результат?

Выход из RewriteLog и RewriteLogLevel 2

[3]

::1 - - [{date}] [xxx][yyy] (2) [perdir /] rewrite 'var/www/html/testing/' -> 'http://localhost:8585/mytesting/' 
::1 - - [{date}] [xxx][yyy] (2) [perdir /] escaped URI in per-dir context for proxy, http://localhost:8585/mytesting/ -> http://localhost:8585/mytesting/ 
::1 - - [{date}] [xxx][yyy] (2) [perdir /] forcing proxy-throughput with http://localhost:8585/mytesting/ 
::1 - - [{date}] [xxx][yyy] (1) [perdir /] go-ahead with proxy request proxy:http://localhost:8585/mytesting/ [OK] 

[4]

::1 - - [{date}] [xxx][yyy] (2) [perdir /] rewrite 'var/www/html/testing/goodOne' -> 'http://localhost:8585/mytesting/goodOne' 
::1 - - [{date}] [xxx][yyy] (2) [perdir /] escaped URI in per-dir context for proxy, http://localhost:8585/mytesting/goodOne -> http://localhost:8585/mytesting/goodOne 
::1 - - [{date}] [xxx][yyy] (2) [perdir /] forcing proxy-throughput with http://localhost:8585/mytesting/goodOne 
::1 - - [{date}] [xxx][yyy] (1) [perdir /] go-ahead with proxy request proxy:http://localhost:8585/mytesting/goodOne [OK] 

[5]

::1 - - [{date}] [xxx][yyy] (2) [perdir /] rewrite 'var/www/html/testing' -> 'http://localhost:8585/var/www/html/testing' 
::1 - - [{date}] [xxx][yyy] (2) [perdir /] escaped URI in per-dir context for proxy, http://localhost:8585/var/www/html/testing -> http://localhost:8585/var/www/html/testing 
::1 - - [{date}] [xxx][yyy] (2) [perdir /] forcing proxy-throughput with http://localhost:8585/var/www/html/testing 
::1 - - [{date}] [xxx][yyy] (1) [perdir /] go-ahead with proxy request proxy:http://localhost:8585/var/www/html/testing [OK] 

[6]

::1 - - [{date}] [xxx][yyy] (2) [perdir /] rewrite 'var/www/html/' -> 'http://localhost:8585/var/www/html/' 
::1 - - [{date}] [xxx][yyy] (2) [perdir /] escaped URI in per-dir context for proxy, http://localhost:8585/var/www/html/ -> http://localhost:8585/var/www/html/ 
::1 - - [{date}] [xxx][yyy] (2) [perdir /] forcing proxy-throughput with http://localhost:8585/var/www/html/ 
::1 - - [{date}] [xxx][yyy] (1) [perdir /] go-ahead with proxy request proxy:http://localhost:8585/var/www/html/ [OK] 
+0

Что произойдет, если вы примете правила из директивы ''? Я не понимаю, почему они должны быть там. – arco444

+0

@ arco444, вы имеете в виду перемещение '[2]' после директивы '', как показано ниже? Я новичок в Apache, что я сделал, возможно, не имеет смысла. DocumentRoot "/ Var/WWW/HTML" Опции FollowSymlinks AllowOverride None RewriteEngine на RewriteRule тестирование /(.*) HTTP: // локальный: 8585/mytesting/$ 1 [P, L] # [1 ] RewriteRule (. *) Http: // localhost: 8585/$ 1 [P, L] # [2] Поймать все правило – Sungam

ответ

0

Регулярное выражение требует «/» после «тестирования», если это не является обязательным, как ваш второй пример предполагает, обновить регулярное выражение, чтобы отразить это, добавляя ?, также рекомендуется использовать% {REQUEST_URI}, а не ненужный (. *) + $ 1 комбо, например.

RewriteRule testing/?(.*) http://localhost:8585/mytesting/$1 [P,L] 
RewriteRule .* http://localhost:8585%{REQUEST_URI} [P,L] 
Смежные вопросы