У меня на сервере есть архив обновлений 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
?