Подделка «пути» файла cookie - через .htaccess / javascript / или иным образом? - PullRequest
8 голосов
/ 28 июня 2011

Фон

У меня есть программное обеспечение php / js ( Piwik ), которое устанавливает cookie для отслеживания посещений сайта.

Наш сайт (т.е. не Piwik) настроен так, что все URL-адреса (кроме ресурсов) записываются обратно в /public/index.php.

Таким образом, каждый из наших пользователей получает уникальный URL, например;

http://www.example.com/user1

http://www.example.com/user2

... и т. Д.

Для отслеживания каждого из этих пользовательских URL-адресов в Piwik было предложено , чтобы мне нужно было указать путь в куки-файле, который Apache отображает в фактическую директорию.

Поскольку у нас нет актуальных каталогов для каждого из наших пользователей, мы не можем этого сделать.

Наконец, мы переходим к использованию RewriteBase в .htaccess, чтобы сообщить Apache, что мы считаем URL-адрес пользователя своим собственным каталогом.

Однако этого не хватает, поскольку, похоже, нет способа использовать RewriteBase без жесткого кодирования «base».

Вопрос

Могу ли я сделать что-то подобное в моем .htaccess? В ответе Франсуа Дешена говорится, что я не могу этого сделать.

RewriteCond ^([^/]*)(/.*)?
RewriteBase %1

Какие еще есть альтернативы для обеспечения того, чтобы «путь» куки-файла был задан как URL пользователя, а не как «/»?

Что у меня сейчас

.htaccess в / содержит;

RewriteRule ^(.*)$ /public/$1 [L]

Тогда .htaccess в / public содержит;

RewriteRule ^index\.php5/(.*)$ -                   [L]
RewriteRule ^index\.php5?(.*)$ -                   [L]
RewriteRule ^index\.php5$      -                   [L]

RewriteRule ^(.*)$             /public/index.php5  [L]

Обратите внимание, что у обоих из них есть другие правила в начале для путей, которые переместились, и т. Д.

Спасибо за любую помощь!

Что я пробовал

Вызов .setCookiePath () для объекта JS Piwik, как предлагается в документации Piwik . Например, для URL http://www.example.com/user1 вызов .setCookiePath ('/ user1') не влияет на путь к файлу cookie.

Добавление косой черты к URL, а затем вызов .setCookiePath (). Например, URL http://www.example.com/user1/ с последующим вызовом .setCookiePath ('/ user1') не устанавливает путь к cookie.

Смежные вопросы

С помощью mod_rewrite я могу указать RewriteBase внутри RewriteCond? - К сожалению, ответ не указывает, могу ли я использовать текущий путь в качестве базы.

1 Ответ

6 голосов
/ 28 июня 2011

Вы не можете сделать это с mod_rewrite. Apache и mod_rewrite не имеют ничего общего с файлами cookie (по крайней мере, в том, что касается Piwik). Это не проблема, связанная с Apache, а то, как Piwik устанавливает cookie. Если вы используете трекер Piwik JavaScript, обратите внимание на этот конкретный раздел документации , а точнее на раздел "Если вы отслеживаете подкаталоги или страницы одного домена на разных сайтах Piwik".

В сущности, вы захотите использовать функцию setCookiePath, и где бы вы ни устанавливали JavaScript, используйте PHP для заполнения пути:

Javascript:

tracker.setCookiePath('/user1');

Чтобы добавить косую черту в .htaccess

Добавьте это поверх ваших других правил:

RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://example.org/$1/ [L,R=301]
...