Фалшифициране на „пътя“ на бисквитка – чрез .htaccess / javascript / или по друг начин?

Заден план

Имам софтуер php/js (Piwik), който задава бисквитка за проследяване на посещенията на сайта.

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

По този начин всеки от нашите потребители получава уникален URL адрес, като например;

http://www.example.com/user1

http://www.example.com/user2

... и т.н

За мен е предложено че трябва да задам пътя в бисквитката на такъв, който Apache картографира към действителна директория.

Тъй като нямаме действителни директории за всеки от нашите потребители, не можем да направим това.

Накрая преминаваме към използване на RewriteBase в рамките на .htaccess за да кажем на Apache, че считаме URL адреса на потребителя за негова собствена директория.

Това обаче не е достатъчно, тъй като изглежда няма начин да се използва RewriteBase без твърдо кодиране на „базата“.

Въпроса

Мога ли да направя нещо подобно в моя .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') всъщност не задава пътя на бисквитката.

Добавяне на наклонена черта в края към URL адреса, след което извикване на .setCookiePath(). Например URL адресът http://www.example.com/user1/ след това извикване на .setCookiePath ('/user1') не задава пътя на бисквитката.

Свързани въпроси

С mod_rewrite мога ли да посоча RewriteBase в рамките на RewriteCond ? - За съжаление отговорът не показва дали мога да използвам текущия път като основа.


person Jess Telford    schedule 28.06.2011    source източник
comment
Любопитни ли сте за крайния вот? Ще се радвам на обратна връзка как това може да бъде по-актуален въпрос :)   -  person Jess Telford    schedule 29.06.2011
comment
Мисля, че трябва да зададете и домейн на бисквитки, повечето браузъри изискват домейн и не задават бисквитки без него   -  person venimus    schedule 30.06.2011
comment
Бисквитката се настройва правилно, но „пътят“ на бисквитката е неправилен. Piwik задава домейна в своя JS код и извикването на .setCookieDomani() не променя нищо.   -  person Jess Telford    schedule 01.07.2011


Отговори (1)


Не можете да направите това с mod_rewrite. Apache и mod_rewrite нямат нищо общо с бисквитките (поне що се отнася до Piwik). Това не е проблем, свързан с Apache, а как Piwik настройва бисквитката. Ако използвате инструмента за проследяване на 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), преди да може да се зададе бисквитка на този път. Опитах setCookiePath() без успех (вижте темата за повече подробности). - person Jess Telford; 28.06.2011
comment
@Jess Telford - вече разгледах темата. Предполага се, че използвате Apache, за да фалшифицирате папка, което вече сте направили във вашите .htaccess файлове. Може да се наложи да добавите наклонена черта в края към URL адресите си, за да работи (т.е. example.org/user1) . Можете да промените своя .htaccess, за да добавите крайната наклонена черта, ако липсва, ако е нереалистично да промените начина, по който се генерират връзките (или ако потребителите имат директен достъп до тях. - person Francois Deschenes; 28.06.2011
comment
За съжаление наклонената черта в края няма значение :( - person Jess Telford; 29.06.2011