Подделать «путь» файла cookie — через .htaccess/javascript/или как-то иначе?

Задний план

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

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

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

http://www.example.com/user1

http://www.example.com/user2

... и т.д

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

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

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

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

Вопрос

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

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

Какие другие альтернативы у меня есть для обеспечения того, чтобы «путь» файла cookie был установлен как 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 ? - К сожалению, в ответе не указано, могу ли я использовать текущий путь в качестве основы.


person Jess Telford    schedule 28.06.2011    source источник
comment
Любопытно, как закрыть голосование? Я хотел бы получить обратную связь о том, как это может быть более актуальным вопросом :)   -  person Jess Telford    schedule 29.06.2011
comment
Я думаю, вам также нужно установить домен cookie, большинство браузеров требуют домен и не устанавливают файлы cookie без него.   -  person venimus    schedule 30.06.2011
comment
Файл cookie устанавливается правильно, но «путь» файла cookie неверен. Piwik устанавливает домен в своем JS-коде, и вызов .setCookieDomani() ничего не меняет.   -  person Jess Telford    schedule 01.07.2011


Ответы (1)


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

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

JavaScript:

tracker.setCookiePath('/user1');

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

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

RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://example.org/$1/ [L,R=301]
person Francois Deschenes    schedule 28.06.2011
comment
Спасибо за информацию - я дал ссылку на это поток в вопросе, который предполагает, что необходимо иметь реальный каталог (или подделать его с помощью Apache), прежде чем файл cookie можно будет установить на этом пути. Я пробовал setCookiePath() безуспешно (подробнее см. Ветку). - person Jess Telford; 28.06.2011
comment
@ Джесс Телфорд - я уже просмотрел ветку. Предлагается использовать Apache для подделки папки, которую вы уже создали в своих .htaccess файлах. Возможно, вам потребуется добавить косую черту в конце URL-адреса, чтобы он работал (например, example.org/user1) . Вы можете изменить свой .htaccess, чтобы добавить конечную косую черту, если она отсутствует, если нереально изменить способ создания ссылок (или если пользователи обращаются к ним напрямую. - person Francois Deschenes; 28.06.2011
comment
К сожалению, косая черта в конце не имеет значения :( - person Jess Telford; 29.06.2011