mfl, более правильно все-таки вынести правило для файла из каталоге в файл htaccess этого каталога (а не прописывать это правило в файле htaccess в корне сайте).
Иначе проверка соответствия этому правилу будет производиться при обращении к любому URL на сайте (хотя может это в конечном итоге и не займет сильно много времени).
anbura, попробуйте в htaccess каталога использовать директиву RewriteBase для указания правильного префикса URL
т.е. допустим, если у вас htaccess лежит в каталоге forum, вместо
RewriteBase /
сделайте в нем
RewriteBase /forum
Именно он и будет выдаваться (если у Вас не настроена страница, обрабатывающая код 404)
допустим у Вас есть страница в корне сайта index2.html.
Но вы хотите при ее запросе отдавать ответ 404
Так сделайте в htaccess внутреннее перенаправление (реврайт) на страницу, которой на сайте точно нет:
RewriteRule ^index2\.html$ /la-la-la-nopage.htm [L]
при редиректе через .htaccess тоже есть возможность установки cookie (добавление кроме флагов [L,R=301] еще и cookie )
Устанавливать куки при редиректе, а обработать ref уже потом, получив его из кук.
Что-то типа
RewriteCond %{QUERY_STRING} ^ref=([0-9]+)$ [NC]
RewriteRule .* http://%{HTTP_HOST}/$0 [R=301,L,CO=ref:%1:%{HTTP_HOST}]
но
#The cookie-flag is available in Apache 2.0.40 and later
а у меня на локалке Apache/1.3.33, так что проверить и отладить не могу.
Правильно кидает
site.ru/dir/txt.txt/
это не файл, а папка
и такой папки у Вас нет !!!
А корректной обработки подобного URL в данном топике не показано
(есть только обработка URL типа "page.html/"),
да и у Вас в .htaccess очевидно тоже нет.
наверно для "site.ru/dir/txt.txt/" (да и для любого URL заканчивающегося на "имя_точка_расширение_слеш") должно быть что-то типа
RewriteRule ^(.*[^./]+\.[^./]+)/+$ /$1 [R=301,L]
Наверно автор хотел использовать т.н. утверждение "(?<!/)",
т.е проверку что последний символ перед этим утверждением не слеш
но возможно в Apache такой синтаксис регулярных выражений не поддерживается.
Можно воспользоваться таким вариантом добавления завершающего слеша если URL не содержит точки и не заканчивается слешем
RewriteRule ^([^.]+)([^./]+)$ /$0/ [R=301,L]
1. перенесите объявление скриптов из нижней части части страницы внутрь тега <head></head>
(быстрее загрузятся, быстрее выполнятся)
2. разнесите картинки по разным доменам
(типа часть картинок на img1.mirpesh.com, часть на img2.mirpesh.com и т.д,
т.к. есть ограничения в браузерах на количество одновременно загружаемых документов с одного домена)
Попробуйте что-то типа
$_SESSION['lasturl']=$_SERVER["REQUEST_URI"];
но перед этим проверить старое значение $_SESSION['lasturl'] и сохранить его в истории посещенных пользователем страниц (например в массиве $_SESSION['history_user'])
Но я уже писал Вам, что будет, если у посетителя будет открыто несколько вкладок здесь
И такое использование сессий будет работать только если браузер посетителя поддерживает сессии (либо через куки, либо через параметр в адресе страницы - во втором случае уже Вам нужно о передаче параметра заботиться )
скорей всего такого решения для onClick нет.
Но и задачу Вы себе поставили (получать информацию о том откуда пришел посетитель) не имеющую решения в 100% случаев, даже если отслеживать переходы внутри одного сайта.
Вы не учитываете еще что в некоторых браузерах реферер не передается или в браузере настраивается чтобы он не передавал эту информацию.
Можно еще для случаев, когда используются сессии, хранить информацию о посещенных страницах на сервере.
Это тоже не может гарантировать 100% точность (например открыто несколько вкладок в браузере и посетитель пользуется то одной, то другой вкладкой).
Но совместно с $_SERVER["HTTP_REFERER"] это может повысить точность определения очередности посещения страниц.