mod_rewrite перенаправить, если файл не найден - PullRequest
0 голосов
/ 02 августа 2011

У меня есть веб-сайт, использующий фронт-контроллер, который перенаправляет трафик на определенные файлы, поэтому я могу использовать оптимизированные для SEO URL-адреса, однако на сайте есть некоторые статические страницы, с которых я не хочу, чтобы трафик направлялся в сторону:

В настоящее время у меня есть следующий .htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.exmple.com/$1 [L,R=301]
ErrorDocument  404  /controller.php

, который, кажется, работает нормально:

  • Весь трафик перенаправляется на www.example.com;
  • И любая веб-страница, которая не найдена, направляется на controller.php для обработки;
  • Все, что на самом деле существует, например www.example.com/about_us.php, все еще работает;

Проблема в том, что онапо-прежнему сообщает об ошибке 404, даже если страница по-прежнему отправляется и отображается правильно - она ​​не выглядит иначе, чем конечный пользователь, но она портит мой SEO с Google, так как бот Google видит 404 и предполагает, что там больше ничего нет.

Можно ли как-то просто перенаправить весь трафик, кроме списка определенных страниц, или есть более элегантное решение?

Любая помощь, мысли, комментарии и т. Д.ost welcome

1 Ответ

1 голос
/ 02 августа 2011
RewriteEngine On
ErrorDocument  404  /controller.php

RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* index.php/$0 [PT]

Вы должны перенаправить через index.php ... иначе строка ниже должна работать вместо верхней.

RewriteRule .* $0 [PT]
...