Перенаправление всех запросов на одну страницу
Собственно, как на apache сделать перенаправление любого запроса на одну страницу, чтобы при этом страница знала, откуда произошло перенаправление?
Уже понял, что mod_rewrite, но ещё не понял, как это сделать с его помощью. Сервер-сайд на php, если что... |
Обычно делается так:
Код:
RewriteCond %{REQUEST_FILENAME} !-f # если не файл |
B@rmaley.e><e, спасибо) Огромное.
|
B@rmaley.e><e, а можно при этом не палить пользователю, что собственно, перенаправление было?
Иными словами, можно ли на каждый вопрос возвращать одну и ту же страницу? Подозреваю, что тут уже нужно будет прописывать не в .htaccess, а где-то глубже... |
trikadin забыл упомянуть, что нужно еще сохранить запрос по которому пришли...
Мой вариант: http://rewr002.jcase.ru/sdvdsv/test1.php?a=ewfw&b=ewef Файлы: .htaccess RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,R=301] index.php <?php session_start(); unset($_SESSION['get']); $_SESSION['get'] = $_GET; header('location: test2.php'); ?> test2.php <?php session_start(); echo '<pre>'; print_r($_SESSION); echo '</pre>'; ?> |
Цитата:
|
Цитата:
|
я делаю всегда так:
RewriteRule ^(.*)$ index.php?%{QUERY_STRING}&include_file=%{REQUEST_FILENAME} [NC,L]на сервер приходит переменная в $_GET['include_file'] вот в ней полный путь к файлу/папке которую юзер запросил |
Да дело уже не в том, чтобы получить этот адрес - это уже, слава богу, решено - дело в том, как не перенаправлять пользователя.
|
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Цитата:
вобщем сам файл выглядит так: DirectoryIndex index.php RewriteEngine On # Базовая директория сайта, если помещаем сайт в подкаталог, дописываем его в RewriteBase RewriteBase / # Все любые запросы к исполняемым файлам, проходят через файл index.php RewriteCond %{REQUEST_FILENAME} !/index.php$ RewriteCond %{REQUEST_FILENAME} .php$ RewriteRule ^([^/]+)/(.*)/$|^([^/]+)(.*)$|^$ index.php?%{QUERY_STRING}&httpd_include_file=%{REQUEST_FILENAME} [NC,L] # Все прочие запросы кроме файлов ресурсов проходят через index.php RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]+)/(.*)/$|^([^/]+)(.*)$|^$ index.php?%{QUERY_STRING} [NC,L] Тоесть это правлило нужно если у меня существует файл например demo.php и юзер к нему хочет напрямую обратиться например в адресе написав http://mysite.ru/demo.php то происходит редирект на индексную и в переменной лежит путь к тому файлу к которому хотели напрямую обратиться, если в правилах у меня указано что туда можно напрямую обратиться, то я просто делаю инклуд к тому файлу что юзер попросил, в противном случае отдаю что-то другое... а ко всем остальным ресурсам, можно обращаться без проблем. и никуда не редиректит... Это правило я юзаю уже с давних пор, всегда работало стабильно и нареканий нет. Цитата:
|
Всё, проблема решена, огромное спасибо devote.
Дело было во флаге R=301. |
Часовой пояс GMT +3, время: 03:36. |