Назад | Перейти на главную страницу

Совет по URL-адресу mod_rewrite в Apache

Я пытаюсь создать mod_rewrite правило так, чтобы, когда веб-страница www.mysite.com/blog запрашивается страница из службы ведения блогов Tumblr загружается. Я настроил свой сайт Tumblr так, чтобы blog.mysite.com возвращал домен. В настоящее время, www.mysite.com/blog перенаправляет на blog.mysite.com. Я хочу www.mysite.com/blog для отображения blog.mysite.com и чтобы пользователь не знал о blog.mysite.com. Я пробовал несколько разных подходов, чтобы добиться этого. Сначала я попытался использовать правило перезаписи:

RewriteEngine On    # Turn on the rewriting engine
RewriteRule  /blog/   http://blog.mysite.com/    [NC,P,L]    

Затем «ProxyPass» (попытка 1)

ProxyPass /blog/ http://blog.mysite.com/

и попытка 2:

<Location /blog/>
    ProxyPass http://blog.mysite.com/
</Location>

Затем я увидел еще один более сложный mod_rewrite правило, которое я тоже пробовал:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^mysite.com/blog$
    RewriteCond %{REQUEST_URI} !/standard
    RewriteRule ^(.*)$ http://blog.mysite.com$1   [R]
</IfModule>

Буду признателен за любой совет, как лучше всего это сделать.

Вы не упоминаете конкретные проблемы для каждого случая, но, по моему опыту, лучшее, что можно сделать при отладке RewriteRules, - это включить журнал перезаписи и поднять уровень перезаписи. Это отобразит входящий запрос, а также пройден / не пройден для каждого правила, а также то, что он делает с запросом, когда он соответствует правилу.

RewriteLog "/usr/local/var/apache/logs/rewrite.log"
RewriteLogLevel 3

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriteloglevel

Не забудьте отключить это после того, как закончите, так как это приведет к снижению производительности, особенно на 3 и выше.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^mysite.com/blog$
    RewriteCond %{REQUEST_URI} !/standard
    RewriteRule ^(.*)$ http://blog.mysite.com$1   [R]
</IfModule>

Это правило почти правильное, оно должно быть:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^mysite.com$
    RewriteCond %{REQUEST_URI} !/standard
    RewriteRule ^(.*)$ http://blog.mysite.com$1   [R]
</IfModule>

Попробуй это.