barabash

barabash
Рейтинг
71
Регистрация
30.04.2011

Работаю с ТС уже больше полу года на постоянной основе, рекомендовал многим своим коллегам, все остались довольны подходом к работе и качеством услуг, рекомендую как ответственного и адекватного специалиста.

Добавить в css:

@media all and (max-width:300px){
.themonic-logo a {
float: none;
}
}

Недавно сталкивался с проблемами при переезде на https.

Это добавил в htaccess:

RewriteEngine On

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

RewriteCond %{HTTPS} =off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

Первый 2 строчки если нужен редирект с www на без www

Еще нужно добавить в php на всех страницах сайта следующее:


<?php
function request_url()
{
$result = ''; // Пока результат пуст
$default_port = 80; // Порт по-умолчанию

if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS']=='on')) {
$result .= 'https://';
$default_port = 443;
} else {
$result .= 'http://';
}
$result .= $_SERVER['SERVER_NAME'];

if ($_SERVER['SERVER_PORT'] != $default_port) {
// Если нет, то добавим порт в URL
$result .= ':'.$_SERVER['SERVER_PORT'];
}
$result .= $_SERVER['REQUEST_URI'];
return $result;
}
?>

На звание профессионала в php я не претендую, во всяком случае пока только начал. Благодарю всех за помощь, тему можно закрывать.

Решил свою проблему таким образом:

Фал index.php


<?
$dmp= explode("/", $_SERVER['REQUEST_URI']); // разбиваем с разделителем "/"
$link = explode(".", $dmp[2]); // Разбиваю с разделителем "." что бы отделить "html", В переменную попадает только часть котрая отвечает за название страницы.
?>
<?php if(!$link[0]){ //если пустая переменная $link[0] - выводим вест список статей
include "articles.php";
} elseif ($link[0]){ //если в переменной $link[0] что-то есть - выводим шаблон полной статьи
include "article.php";
}?>

Файл article.php:


<?php
include "adm/connect.php";
$sql = mysql_query("SELECT * FROM blog WHERE seo_link = '".$link[0]."'") or die(mysql_error()); // Выполняю азвпрос к базе где WHERE = переменной (в столбце "seo_link" хранится seo url ля каждой статьи)
$newsData = array();
$result = mysql_fetch_array($sql, MYSQL_ASSOC);
?>
<? if($link[0] == $result['seo_link']){ //Если данные в переменной $link[0] совпадают с данными из запроса - значит статья существует - выводим ее?>
<article>
<p><?=$result['title'];?></p>
<p><?=$result['keywords'];?></p>
<p><?=$result['description'];?></p>
<p><?=$result['seo_link'];?></p>
<p><a href="<?=$result['seo_link'];?>.html"><?=$result['title_h1'];?></a></p>
<p><?=$result['text'];?></p>
<p><?=$result['date'];?></p>
<p><?=$result['autor'];?></p>
<p><?=$result['raiting'];?></p>
</article>
<?php } else { // Если в запросе не содержится данных - выводим 404 ошибку
header($_SERVER['SERVER_PROTOCOL']." 404 Not Found");
header("Location: 404.html");
} ?>

Всем большое спасибо за советы, я изначально не правильно понял принцип действия формирования ЧПУ

Sitealert:
У Вас проблема в другом, как мне кажется. Ваш скрипт article.php никак не выводит содержимое статьи, если он действительно такой, как Вы показали.

Там выводится только содержимое get запроса, это для теста.

Я кажется начал разбираться.

Удалил article.php и обрабатываю все в index.php

Создал условие на проверку get переменной, если она пуста - выводится список всех статей, если в ней есть параметры - вывожу статью с этим параметром.

Есть папка "blog"

В ней находится 2 файла:

- index.php содержащий:


<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
</head>
<body>
<div id="content">
<?php
include "adm/connect.php";
$sql = mysql_query("SELECT * FROM `blog` LIMIT 5") or die(mysql_error());
$newsData = array();
while($result = mysql_fetch_array($sql, MYSQL_ASSOC)){
$newsData[] = $result;
}

foreach($newsData as $oneNews):
?>

<article>
<p><?=$oneNews['title'];?></p>
<p><?=$oneNews['keywords'];?></p>
<p><?=$oneNews['description'];?></p>
<p><?=$oneNews['seo_link'];?></p>
<br>
<p><a href="/blog/article.php?id=<?=$oneNews['seo_link'];?>.html"><?=$oneNews['title_h1'];?></a></p>
<p><?=$oneNews['text'];?></p>
<p><?=$oneNews['date'];?></p>
<p><?=$oneNews['autor'];?></p>
<p><?=$oneNews['raiting'];?></p>
</article>

<?php endforeach; ?>
</div>

<input id="show_more" count_show="5" count_add="5" type="button" value="Показать еще" />


<script>
$(document).ready(function(){
$('#show_more').click(function(){
var btn_more = $(this);
var count_show = parseInt($(this).attr('count_show'));
var count_add = $(this).attr('count_add');
btn_more.val('Подождите...');

$.ajax({
url: "ajax.php", // куда отправляем
type: "post", // метод передачи
dataType: "json", // тип передачи данных
data: { // что отправляем
"count_show": count_show,
"count_add": count_add
},
// после получения ответа сервера
success: function(data){
if(data.result == "success"){
$('#content').append(data.html);
btn_more.val('Показать еще');
btn_more.attr('count_show', (count_show+5));
}else{
btn_more.val('Больше нечего показывать');
}
}
});
});

});
</script>
</body>
</html>

- article.php содержащий:


<?php
include("adm/connect.php");
$result = mysql_query("SELECT * FROM blog WHERE id = ".$_GET['id']."");
echo $_GET['id'];
?>

Может кто-то на примере написать с комментарием?

Как сделать вместо такой ссылки - <a href="/blog/article.php?id=<?=$oneNews['seo_link'];?>.html"><?=$oneNews['title_h1'];?></a>

Такую - <a href="/blog/<?=$oneNews['seo_link'];?>.html"><?=$oneNews['title_h1'];?></a>

Благодарю за помощь но я все равно ничего из выше написанного не понял. Я только учу php и не могу понять то что Вы написали.

Все запросы идут через index.php, там удобным вам образом подключается роутер

У меня в index.php выводится полный список всех статей, чего там мне подключается.

Тут же или внутри blog.php можно сделать что-то подобное:

У меня нету фала "blog.php", есть только папка blog в которой находится index.php (в которой выводятся все публикации) и article.php (в которую я передаю id что бы используя его, вывести текст полной статьи)

miketomlin:
Делайте, как получается. Я вам изначально написал, что .htaccess следовало бы использовать по минимуму, и показал, как это сделать.

---------- Добавлено 27.10.2016 в 20:50 ----------

В приведенной в моем первом посте статье все запросы, не относящиеся к файлам, первоначально получает index.php, а далее из него уже можно подключать article.php или любой др. нужный файл. Это и называется единой точкой входа.

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

У меня сейчас есть файл index.php, котрый при заходе на страницу /blog/ выдает список статей.

Ссылки формируются так - <a href="/blog/article.php?id=<?=$oneNews['seo_link'];?>"><?=$oneNews['title_h1'];?></a>

где:

article.php - страница вывода полной статьи

id - seo ссылка

В HTML все выглядит так - <a href="/blog/article.php?id=link_my.html">Заголовок</a>

Хочу сделать что бы часть article.php?id= не отображалась, но передавала get запрос, в итоге что бы:

Было так - /blog/article.php?id=link_my.html

Стало так - /blog/link_my.html

Это можно сделать в htaccess или я изначально не правильно создал структуру php файлов?

Всего: 206