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

Правила Apache mod_rewrite не срабатывают?

У меня на сервере есть архив обновлений Twitch Plays Pokemon Reddit (http://flarn2006.dyndns.org/tppupdates/). Некоторые из них содержат ссылки в формате "/ u /"имя пользователя", который действует на Reddit, но не на моем сайте. (Я не имею в виду ссылки справа; они верны.) Я пытаюсь использовать mod_rewrite для автоматического перенаправления этих ссылок, поэтому, если он запрос на "/ u /что-нибудь"с реферером, содержащим" / tppupdates / ", он перенаправит его на Reddit.

В моем apache2.conf есть следующее:

RewriteEngine on
RewriteCond %{HTTP_REFERER} /tppupdates/
RewriteRule ^/u/(.*)$ http://reddit.com/u/$1 [R=301]

Тем не менее, когда я нажимаю на одну из оскорбительных ссылок, я получаю просто 404. Что не так?

Хорошо, вот более полный ответ на это:

Механизм перезаписи не работает точно так же, в зависимости от расположения инструкций перезаписи. В основном есть 2 контекста для инструкций: для каждого сервера и для каждого каталога. Они следующие:

| in apache2.conf files:
|
|   here it is per server
|
|   <VirtualHost>
|
|        per server
|
|        <Directory, Location, File or Proxy>
|
|           per dir !!!
|
|        </Directory, etc>
|   </VirtualHost>

В .htaccess: всегда в контексте каталога

В контексте сервера используйте это:

RewriteEngine on
RewriteCond %{HTTP_REFERER} /tppupdates/
RewriteRule ^/u/(.*)$ http://reddit.com/u/$1 [R=301]

И в контексте каталога используйте это, если вы находитесь в корневой папке Интернета, в соответствии с вашим примером:

RewriteEngine on
RewriteCond %{HTTP_REFERER} /tppupdates/
RewriteRule ^u/(.*)$ http://reddit.com/u/$1 [R=301]

Обратите внимание на отсутствие первого "/"в RewriteRule.

С этими правилами вам не нужно создавать каталог с именем / u.

Еще немного информации в документации apache: RewriteRule, что соответствует и технические детали

И ты уверен, что хочешь этого RewriteCond?