mfl, более правильно все-таки вынести правило для файла из каталоге в файл htaccess этого каталога (а не прописывать это правило в файле htaccess в корне сайте).
Иначе проверка соответствия этому правилу будет производиться при обращении к любому URL на сайте (хотя может это в конечном итоге и не займет сильно много времени).
Mike05: При этом редирект в .хтаксесс делать нельзя, поскольку этот ref надо обработать и прописать в куки.
при редиректе через .htaccess тоже есть возможность установки cookie (добавление кроме флагов [L,R=301] еще и cookie )
Флаг 'cookie|CO=NAME:VAL:domain[:lifetime[: path]]' (записать cocookie) Записывает cookie клиенту. Имя cookie указывается в NAME а его значение в VAL. Поле domain это домен cookie, такой как например '.apache.org', опциональное lifetime это время жизни cookie в минутах, и опциональный path это путь cookie
Устанавливать куки при редиректе, а обработать ref уже потом, получив его из кук.
но перед этим проверить старое значение $_SESSION['lasturl'] и сохранить его в истории посещенных пользователем страниц (например в массиве $_SESSION['history_user'])
Но я уже писал Вам, что будет, если у посетителя будет открыто несколько вкладок здесь
И такое использование сессий будет работать только если браузер посетителя поддерживает сессии (либо через куки, либо через параметр в адресе страницы - во втором случае уже Вам нужно о передаче параметра заботиться )
Но и задачу Вы себе поставили (получать информацию о том откуда пришел посетитель) не имеющую решения в 100% случаев, даже если отслеживать переходы внутри одного сайта.
Вы не учитываете еще что в некоторых браузерах реферер не передается или в браузере настраивается чтобы он не передавал эту информацию.
Можно еще для случаев, когда используются сессии, хранить информацию о посещенных страницах на сервере.
Это тоже не может гарантировать 100% точность (например открыто несколько вкладок в браузере и посетитель пользуется то одной, то другой вкладкой).
Но совместно с $_SERVER["HTTP_REFERER"] это может повысить точность определения очередности посещения страниц.
mfl, более правильно все-таки вынести правило для файла из каталоге в файл htaccess этого каталога (а не прописывать это правило в файле htaccess в корне сайте).
Иначе проверка соответствия этому правилу будет производиться при обращении к любому URL на сайте (хотя может это в конечном итоге и не займет сильно много времени).
anbura, попробуйте в htaccess каталога использовать директиву RewriteBase для указания правильного префикса URL
т.е. допустим, если у вас htaccess лежит в каталоге forum, вместо
RewriteBase /
сделайте в нем
RewriteBase /forum
нужно именно, чтобы при запросе ответ 404 отдавался
Именно он и будет выдаваться (если у Вас не настроена страница, обрабатывающая код 404)
допустим у Вас есть страница в корне сайта index2.html.
Но вы хотите при ее запросе отдавать ответ 404
Так сделайте в htaccess внутреннее перенаправление (реврайт) на страницу, которой на сайте точно нет:
RewriteRule ^index2\.html$ /la-la-la-nopage.htm [L]
При этом редирект в .хтаксесс делать нельзя, поскольку этот ref надо обработать и прописать в куки.
при редиректе через .htaccess тоже есть возможность установки cookie (добавление кроме флагов [L,R=301] еще и cookie )
Флаг 'cookie|CO=NAME:VAL:domain[:lifetime[: path]]' (записать cocookie)
Записывает cookie клиенту. Имя cookie указывается в NAME а его значение в VAL. Поле domain это домен cookie, такой как например '.apache.org', опциональное lifetime это время жизни cookie в минутах, и опциональный path это путь 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/ - кидает на 404
Хотя по идее стоит строка RewriteCond %{REQUEST_FILENAME} !-f
Правильно кидает
site.ru/dir/txt.txt/
это не файл, а папка
и такой папки у Вас нет !!!
А корректной обработки подобного URL в данном топике не показано
(есть только обработка URL типа "page.html/"),
да и у Вас в .htaccess очевидно тоже нет.
наверно для "site.ru/dir/txt.txt/" (да и для любого URL заканчивающегося на "имя_точка_расширение_слеш") должно быть что-то типа
RewriteRule ^(.*[^./]+\.[^./]+)/+$ /$1 [R=301,L]
Спасибо.
Но предпоследняя строка (RewriteRule ^([^.]+)(?</)$ /$1/ [R=301,L])
Вызывает 500ю ошибку
Наверно автор хотел использовать т.н. утверждение "(?<!/)",
т.е проверку что последний символ перед этим утверждением не слеш
но возможно в 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"] это может повысить точность определения очередности посещения страниц.