Правило перезаписи для мобильного URL

Мне нужно перенаправить мобильных пользователей на новый URL ( / amp / ... ), поэтому я добавил этот фрагмент кода в конфигурацию своего сайта Apache:

RewriteCond %{HTTP_REFERER} !^http://test.domain.com [NC]
RewriteCond %{REQUEST_URI} !^/amp/.*$
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^(.*)$ /amp/$1 [L,R=302]`

Проблема в том, что меня перенаправляют только при запросе домашней страницы ( test.domain.com ), а не когда я запрашиваю любой другой URL (например, test.domain.com / category / web ). Есть идеи, что я делаю не так?

Это сайт Wordpress, а полный модуль перезаписи:

<Directory /var/www/project>
    DirectoryIndex index.php
    Options None FollowSymLinks
    AllowOverride none
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /
        RewriteRule ^uploads/(.+) http://myCDN.com/uploads/$1  [R,L]
        RewriteRule ^index\.php$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /index.php [L]
        RewriteCond %{HTTP_REFERER} !^http://test.domain.com [NC]
        RewriteCond %{REQUEST_URI} !^/amp/.*$
        RewriteCond %{HTTP_USER_AGENT} "android|blackberry|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
        RewriteRule ^(.*)$ /amp/$1 [L,R=302]
    </IfModule>
</Directory>
2
задан 5 April 2017 в 10:40
1 ответ

Ваше перенаправление должно идти до переднего контроллера (внутренняя перезапись). Фронт-контроллер перехватывает каждый запрос,кроме корня документа (домашней страницы). Таким образом, ваше перенаправление обрабатывается только для домашней страницы и просто игнорируется для всех других запросов.

Другими словами:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_REFERER} !^http://test.domain.com [NC]
RewriteCond %{REQUEST_URI} !^/amp/.*$
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^(.*)$ /amp/$1 [L,R=302]

RewriteRule ^uploads/(.+) http://myCDN.com/uploads/$1  [R,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Как правило, внешние перенаправления всегда должны выполняться до внутренней перезаписи.

Вы упоминаете это в вашей "конфигурации сайта Apache". Я предполагаю, что эти директивы находятся в контейнере внутри вашей «конфигурации сайта» (то есть в контексте каталога ). (Эти директивы просто не будут работать в контексте конфигурации сервера или виртуального хоста , т. Е. Непосредственно в вашей «конфигурации сайта».)

1
ответ дан 3 December 2019 в 12:36

Теги

Похожие вопросы