Перенаправление всех запросов на одну страницу
Собственно, как на 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, время: 06:32. |