Как перенаправить URL-адрес, который не найден, без отправки заголовка 404? - PullRequest
1 голос
/ 04 марта 2011

Моему веб-сайту нужен файл .htaccess, который перенаправит пользователя на index.php, если страница не найдена. Однако я не хочу, чтобы Apache отправлял заголовок 404 с документом.

Я задавал этот вопрос ранее: Apache .htaccess 404 ошибка перенаправления

Команда "ErrorDocument /index.php" производит именно тот эффект, который мне нужен, за исключением того, что она отправляет заголовок 404 со страницей. Что я могу сделать? Должен ли я перезаписать 404 заголовок PHP?

1 Ответ

8 голосов
/ 04 марта 2011

Добавьте это к вашему .htaccess файлу:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
  1. включить перезапись
  2. проверить, существует ли запрошенный файл как обычный файл с размером (не пустым)
  3. проверить, является ли запрашиваемый файл ссылкой
  4. проверить, является ли запрашиваемый файл каталогом
  5. , если одно из предыдущих 3 утверждений истинно, показать этот файл
  6. в противном случае перейдите на index.php

Если происходит перенаправление на index.php, вы можете получить запрошенный URI, используя $_SERVER["REQUEST_URI"] внутри index.php

  • '- d' (is directory) Обрабатывает TestString как имя пути и проверяет, он существует и является каталогом.
  • '- f' (обычный файл) Обрабатывает TestString как имя пути и проверяет, он существует и является обычным файлом.
  • '- s' (обычный файл с размером) Обрабатывает TestString как путь и проверяет, существует ли он и является ли обычный файл с размером больше чем ноль.
  • '- l' (является символической ссылкой) Обрабатывает TestString как имя пути и проверяет, он существует и является символической ссылкой.
  • '- F' (существует файл через подзапрос) Проверяет, является ли TestString действительный файл и доступен через все настроенный в данный момент доступ к серверу контролирует этот путь. Это использует внутренний подзапрос для определения проверьте, так что используйте его с осторожностью, потому что это снижает производительность ваших серверов!
  • '- U' (является существующим URL через подзапрос) Проверяет, является ли TestString действительный URL и доступ через все настроенный в данный момент доступ к серверу контролирует этот путь. Это использует внутренний подзапрос для определения проверьте, так что используйте его с осторожностью, потому что это снижает производительность вашего сервера!

Дополнительная информация: http://httpd.apache.org/docs/current/mod/mod_rewrite.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...