Mod Rewrite Proroduction 404 при сканировании (работает нормально при просмотре в браузере) - PullRequest
0 голосов
/ 05 сентября 2010

В моем .htaccess есть следующий код:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Мое преобразование симпатичной ссылки выполнено в моем index.php.Если пользователь ищет что-то, чего не существует, создается заголовок 404. В противном случае отображается содержимое.

Это нормально, но когда сканер или что-то пытается просмотреть HTML, ониполучаю ошибку 404.

Например:

http://www.jasonleodurbin.com/portfolio Эта ссылка должна работать нормально.

Если вы попытаетесь проверить его в валидаторе HTML, он не будет работать.Сканер сообщает, что получает 404. Я получаю то же самое для общего ресурса Facebook.

Я попытался удалить заголовок ошибки 404, и у меня все еще возникает та же проблема.

Что такое сделка?Есть предложения?

РЕДАКТИРОВАНИЕ:

Новый .htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^jasonleodurbin\.com$ [NC]
RewriteRule ^(.*)$ http://www.jasonleodurbin.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+)/$ index.php?go=$1&app=1 [NC,L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+)?success=true index.php?go=$1&success=1 [NC,L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+) index.php?go=$1 [NC,L,QSA]

Обработка:

globals.php

if(!isset($_GET['go']) || $_GET['go'] == "") $_GET['go'] = "home";

header.php

if(isset($_GET['go']) && !@fopen(strtolower($_GET['go']).".php",'r')){
    //header("HTTP/1.0 404 Not Found");
    define("FAIL",true);
    $_GET['go'] = "error";
}
else {
    define("FAIL",false);
Header('HTTP/1.1 200');
}
if(FAIL) define("GOSUB",DIR);
if(isset($_GET['app'])) define("GOSUB","../");
else define("GOSUB","");

Я также пробовал это для index.php:

<?Header('HTTP/1.1 200 OK');?>
<? require_once("header.php");?>
<? require_once(strtolower($_GET['go'].".php"));?>

    </div>
</div>
<?
    if(!defined("FOOTER"))define('WP_USE_THEMES', false);
    define("FOOTER",true);
    include("blog/index.php");
?>
<!--[if IE]>
<a href='http://www.google.com/chrome' title='Get Google Chrome : A Better Way To Browse' class='noie sprite-1'>IE Sucks</a>
<![endif]-->
<!--[if lt IE 7]>
<div style='position:absolute;top:60px;left:0px;'><b>IE 6</b>?! Dude, upgrade. <br>Click the link above to get Google Chrome.</div>
<![endif]-->
</body>
</html>

Что-то отправляет 404, прежде чем я могу даже отправить 200.

Ответы [ 3 ]

1 голос
/ 05 сентября 2010

Вы, похоже, используете Wordpress.Wordpress устанавливает любую страницу, которую он не находит, как 404.

Также вас может заинтересовать плагин Link Juice Keeper .Он перенаправляет все 404 страницы на первую страницу с помощью перенаправления 301.А вот Wordpress 404 советов и хитростей .

1 голос
/ 05 сентября 2010

Я показываю страницу портфолио, , но с заголовком 404.Итак, проверьте код, который устанавливает заголовок 404. Ошибка где-то там.

Мне кажется, что вы используете fopen только для того, чтобы увидеть, существует ли файл (если он не открывается, он не 'не существует).Для этого используйте file_exists(): http://php.net/file_exists

0 голосов
/ 05 сентября 2010

Вы уверены, что нет другого места в коде, куда может быть отправлен другой 404?если никто другой не находит, то, похоже, проблема в вашей конфигурации, попробуйте отправить противоположный заголовок 200 OK, когда страница будет одобрена.

Кстати, не делайте fopen(strtolower($_GET['go']), пользователь может установить$_GET['go'] до http://his.domain.com/page, и вы заканчиваете тем, что включаете страницу со своего сервера, если конфигурации PHP позволяют это (allow_url_fopen).

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