Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ошибка 404 и файл .htaccess
 
 автор: Habl   (21.08.2013 в 11:06)   письмо автору
 
 

Всем привет!
Нужна помощь в создании ошибки 404
Создать саму страницу не проблема, дело в том, что по таким ссылкам 404 не вылетает, а отдает код 200 что подскажите? как быть? )

test.ru/catalog/jsdfhsdjifhsduif sd
test.ru/catalog/jsdfhsdjifhsduifsd/343242
test.ru/catalog.php
test.ru/catalog3123


ErrorDocument 404 /404.php
AddDefaultCharset utf-8
php_value upload_max_filesize 10M
php_value post_max_size 12M
 
RewriteEngine on
RewriteRule .htaccess - [F]
RewriteBase /
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^shop/([a-z0-9\-_/]+)/?$ shop.php?hpu=$1 [L]
RewriteRule ^([a-z\-/]+)/?$ index.php?hpu=$1 [L]

  Ответить  
 
 автор: Zezst   (22.08.2013 в 00:36)   письмо автору
 
   для: Habl   (21.08.2013 в 11:06)
 

Для начала, я б, таки сделал страницу и проверил, попадаем ли туда на самом деле.
Если не попадаем, значит ошибка в RewriteEngine on.
http://ru.wikipedia.org/wiki/%CE%F8%E8%E1%EA%E0_403#200

  Ответить  
 
 автор: Habl   (22.08.2013 в 08:59)   письмо автору
 
   для: Zezst   (22.08.2013 в 00:36)
 

Вы имеете ввиду страницу 404? Если да, то она сделана

  Ответить  
 
 автор: Zezst   (22.08.2013 в 13:00)   письмо автору
 
   для: Habl   (22.08.2013 в 08:59)
 

и...
Попадаете на нее?
Если нет, то вам сюда
http://www.htaccess.net.ru/

  Ответить  
 
 автор: Habl   (22.08.2013 в 13:37)   письмо автору
 
   для: Zezst   (22.08.2013 в 13:00)
 

Я попадаю на 404 например по такому url
http://www.test-metal.ru/shop/fdfs%5D
а вот по такому уже нет
http://www.test-metal.ru/shop/jsdfsjfsdfhjsdhfjkshfjfhsdjkf
по такому url он просто открывает мне страничку, но контент не выводит ни какой
получается очевидный дубль...

  Ответить  
 
 автор: Zezst   (22.08.2013 в 13:45)   письмо автору
 
   для: Habl   (22.08.2013 в 13:37)
 

т.е. счас вас выкидывает либо в shop.php
либо в index.php ?
вот так напишите в shop.php, первой строчкой
echo $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
exit;


просто что бы быть уверенным что мы точно попадаем в shop, и если да то тут уже думайте как это исполльзовать, либо таки возитесь с настройками mod_rewrite

  Ответить  
 
 автор: Habl   (22.08.2013 в 13:54)   письмо автору
 
   для: Zezst   (22.08.2013 в 13:45)
 

Выкидывает меня постоянно на shop, только контент не выводится, т.к. по такому url нечего выводить

  Ответить  
 
 автор: Zezst   (22.08.2013 в 15:22)   письмо автору
 
   для: Habl   (22.08.2013 в 13:54)
 

а вы в shop.php вписали , то что я вас просил
если оно не выводит jsdfsjfsdfhjsdhfjkshfjfhsdjkf вот такое
значит в shop.php вы все таки не попадаете

З.Ы. как доберусь домой попробую ваш .htaccess
посмотрю что он делает

  Ответить  
 
 автор: Zezst   (22.08.2013 в 17:26)   письмо автору
 
   для: Habl   (22.08.2013 в 13:54)
 

Собственно проверил я ваш .htaccess
Все нормально работает.
Строка
RewriteRule ^shop/([a-z0-9\-_/]+)/?$ shop.php?hpu=$1 [L]

В первом случае, когда вы делаете запрос
http://www.test-metal.ru/shop/fdfs %5D 

выделенный символ не попадает в правило определенное вами и вас отправляет на ошибку 404
Во втором случае
http://www.test-metal.ru/shop/jsdfsjfsdfhjsdhfjkshfjfhsdjkf

все символы попадают в маску и вас кидает на файл shop.php
Соответственно, если вам надо, сделать так, что бы и во втором случае кидало на страницу с ошибкой 404, то вам нужно это отлавливать непосредственно в файле shop.php
Как то так.

Если не секретная информация, покажите файл shop.php. Или хотя бы начало.

  Ответить  
 
 автор: Zezst   (22.08.2013 в 17:38)   письмо автору
 
   для: Habl   (22.08.2013 в 13:54)
 

У вас в правилах, после shop.php, разрешенно использовать :
- маленькие буквы
- цифры
- ?
- знак минус
- _
- /

Так, как то.

Естественно, что попадает под правило, то ему следует. Что не попало, того на 404.

  Ответить  
 
 автор: Habl   (23.08.2013 в 09:55)   письмо автору
 
   для: Zezst   (22.08.2013 в 17:38)
 


<?php 
//echo $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
//exit;
include ("block/db.php");
header('Content-type: text/html; charset=utf-8');
$result mysql_query("SELECT id,cat_hpu,meta_d,meta_k FROM categoryes WHERE cat_hpu='$_GET[cat_hpu]'");
$myrow mysql_fetch_array($result);
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta name="keywords" content="<?php echo $myrow['meta_k']; ?>" />
<meta name="description" content="<?php echo $myrow['meta_d']; ?>" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="icon" href="/favicon.ico" type="image/x-icon" />
<link rel="stylesheet" href="http://www.test-metal.ru/style.css"/>
</head>
<body>
<?php include ("block/header_fon.php"); ?>
<div id="container">
<?php 
include ("block/header.php"); 
include (
"block/contact.php");
include (
"block/top_menu.php");
include (
"block/right_menu.php");
?>
<table align='center' border='0' cellpadding='1' cellspacing='1' style='width:806px'>
<tbody>
<tr> 
<?php
if ($_GET['id']){
$result mysql_query("SELECT * FROM products WHERE id='$_GET[id]'");
$myrow mysql_fetch_assoc($result);

//print_r($myrow);
//echo "$myrow[text]";
print <<<HERE
<div id="content">
$myrow[text]
</div>
HERE;
}
elseif (isset(
$_GET['hpu'])){
$result mysql_query("SELECT * FROM products WHERE hpu='$_GET[hpu]'");
$myrow mysql_fetch_assoc($result);
print_r($myrow);
//echo "$myrow[text]";
if (mysql_num_rows($result)> 0) {
echo 
"<div style='text-align:centre;'>";
echo 
"<table align='center' cellspacing='0' cellpadding='0'>";
echo 
"<tr>";
 
$i=0;
while (
$myrow mysql_fetch_assoc ($result))
{
   echo (
$i == "</tr><tr>" "");
   echo 
"<td style='padding:16px;'>
   <p><img alt='
$myrow[title]' src='$myrow[img]'/><br/>
   <a href='/shop.php?hpu=
$myrow[hpu]&id=$myrow[id]'>$myrow[title]</a><br/>
   
$myrow[settings]<br/>
   
$myrow[price] рублей за 1 метр</p>
   </td>"
;
   ++
$i;
}
echo 
"</tr>";
echo 
" </table>";
echo 
"</div>";
}
else {echo 
"<p style='font-size:19px; font-wieght:bold; color:red;'>Данного товара пока что нет!</p>";}
}
?>
</tr>
</tbody>
</table>
</div>
</div>
<div id="rasporka"></div>
<?php include ("block/footer.php");?>   
</body>
</html>
]

  Ответить  
 
 автор: Zezst   (23.08.2013 в 16:08)   письмо автору
 
   для: Habl   (23.08.2013 в 09:55)
 

А если вы просто заходите на shop.php, что происходит?
По заданному в .htaccess правилу, все, что идет по shop/, превращается в $_GET запрос:
if ($_GET['id']){ 
$result = mysql_query("SELECT * FROM products WHERE id='$_GET[id]'");

С той абракадаброй, что вы прописываете, из базы ничего не возвращается, этого в базе просто нет. Соответственно, самый простой вариант - проверить $result, и, если там пусто или ошибка, перекинуть юзера на 404.php.

  Ответить  
 
 автор: confirm   (24.08.2013 в 13:27)   письмо автору
 
   для: Habl   (23.08.2013 в 09:55)
 

То есть из ранее сказанного вы учли только одно - "ладно, пусть будет mysql_fetch_assoc"?

  Ответить  
 
 автор: Sfinks   (22.08.2013 в 20:30)   письмо автору
 
   для: Habl   (21.08.2013 в 11:06)
 

в начале 404.php напишите:
<?php
header
('HTTP/1.1 404 Not Found');
и будет 404

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования