Zamiana brzydkich URL na ładne - problem
Zamiana brzydkich URL na ładne - problem
Chciałem skorzystać ze skryptu przedstawionego w kursie pozycjonowania. Problem w tym, że mam dużo podstron(w plikach .php). Dlatego pomyślalem, że w tabeli categories oraz strony (w bazie danych) dodam kolumnę url(w której będę przechowywał np. skrypt.php), a w skrypcie index.php będę dołączał za pomocą funkcji include() skrypt php którego URL jest w bazie danych. Mam problem jak postąpić z plikami, które wymagają przesłania zmiennych metodą GET. Np. skrypt.php?id=1. Funkcjami include(), require() już próbowałem, ale wyskakuje błąd.
Re: Zamiana brzydkich URL na ładne - problem
Przyglądnij się w PHP manual:
http://php.net/manual/en/function.include.php
na "Example #3 include() through HTTP" lub na tę metodę.
http://php.net/manual/en/function.include.php
na "Example #3 include() through HTTP" lub na tę metodę.
Re: Zamiana brzydkich URL na ładne - problem
Dziękuję za pomoc,. Udało mi się napisać coś takiego:
- plik .htaccess
-plik index.php
Mam jeszcze kilka pytań:
1)Do czego służy i czy ma znaczenie w pozycjonowaniu linijka "header("HTTP/1.0 404 Not Found");"? Gdy wywoływała się funkcja error_404() to w Firefox wszystko było OK wyświetlał się plik 404.shtml, ale w Google Chrome wyświetlał się domyślny komunikat tej przeglądarki. Gdy usunąłem tę linijkę to i w Google Chrome wyświetlała się strona 404.shtml
2)Czy ten skrypt nie obciąża za bardzo serwera?
3)Czy moc ze starych linków (np. skrypt.php?id=1) przejdzie na nowe (np. /dzial/)?
4)Czy jest coś co mogę jeszcze poprawić w tych plikach?
- plik .htaccess
Code: Zaznacz cały
RewriteEngine On
RewriteBase /re-rewting/
RewriteCond %{QUERY_STRING} ^([a-zA-Z0-9]+=[a-zA-Z0-9]+)&([a-zA-Z0-9]+=[a-zA-Z0-9]+)&([a-zA-Z0-9]+=[a-zA-Z0-9]+)$
RewriteRule ^([^(index)][a-zA-Z0-9-_/.]+\.php)$ index.php?page=$1-__-%1-___-%2-___-%3 [L]
RewriteCond %{QUERY_STRING} ^([a-zA-Z0-9]+=[a-zA-Z0-9]+)&([a-zA-Z0-9]+=[a-zA-Z0-9]+)$
RewriteRule ^([^(index)][a-zA-Z0-9-_/.]+\.php)$ index.php?page=$1-__-%1-___-%2 [L]
RewriteCond %{QUERY_STRING} ^([a-zA-Z0-9]+=[a-zA-Z0-9]+)$
RewriteRule ^([^(index)][a-zA-Z0-9-_/.]+\.php)$ index.php?page=$1+-+%{QUERY_STRING} [L]
RewriteRule ^([^(index)][a-zA-Z0-9-_/.]+\.php)$ index.php?page=$1 [L]
RewriteCond %{REQUEST_URI} [^/]$
RewriteRule ^([^.]+)$ $1/ [R=301,L]
RewriteRule ^([^.]+)/$ /re-rewting/index.php?page=$1 [L]
Code: Zaznacz cały
<?php
ob_start();
require_once("database_connect.php");
function error_404($message="")
{
header("HTTP/1.0 404 Not Found");
echo $message;
include('404.shtml');
exit;
}
function is_available($page, $dbc)
{
$page = mysqli_real_escape_string($dbc, $page); //mini zabezpieczenie
$parentCategoryId = 0; //id kategori nadrzędnej
if ((strpos($page, ".htm") == false) && (strpos($page, ".html") == false) && (strpos($page, ".php") == false)) //jezeli kategoria
{
$categoriesAndPages = explode("/", $page); //rozbicie na kategorie
for ($i = 0; $i < count($categoriesAndPages); $i++)
{
$q = "SELECT id FROM categories WHERE category_name = '".$categoriesAndPages[$i]."' AND parent_category_id = ".$parentCategoryId;
$category = mysqli_query($dbc, $q);
if (mysqli_num_rows($category))
{
$category = mysqli_fetch_assoc($category);
$parentCategoryId = $category['id'];
if (count($categoriesAndPages) == ($i + 1))
{
$category = mysqli_query($dbc, "SELECT category_URL FROM categories WHERE category_name = '".$categoriesAndPages[$i]."' ") or die (mysql_error());
$category = mysqli_fetch_assoc($category);
if (strpos($category['category_URL'], "?"))
{
$url = explode("?", $category['category_URL']);
$get_vars = explode("&", $url[1]);
for ($i= 0; $i < count($get_vars); $i++)
{
$get_var = explode("=", $get_vars[$i]);
$_GET[$get_var[0]] = $get_var[1];
}
include $url[0];
exit();
}
else
{
include $category['category_URL'];
exit();
}
}
}
else
error_404();
}
}
else //w innym wypadku "plik .htm/.html/.php"
{
$page = str_replace("-__-", "?", $page);
$page = str_replace("-___-", "&", $page);
$q = "SELECT category_name, parent_category_id FROM categories WHERE category_URL = '".$page."'";
//echo $q . '<br />';
$category = mysqli_query($dbc, $q);
if(mysqli_num_rows($category) == 1)
{
$category = mysqli_fetch_assoc($category);
$parentCategoryId = $category['parent_category_id'];
if($parentCategoryId == 0)
{
header("location: /re-rewting/" . $category['category_name'] . "/");
}
else
{
$categoriesName = $category['category_name']; //przechowuje nowy url z nazwami kategorii np. "/gry/Kolko-krzyzyk/"
for ($i = 0;;$i++)
{
$q = "SELECT category_name, parent_category_id FROM categories WHERE id = ".$parentCategoryId;
$category = mysqli_query($dbc, $q);
if(mysqli_num_rows($category) == 1)
{
$category = mysqli_fetch_assoc($category);
$categoriesName = $category['category_name'] . "/" . $categoriesName;
$parentCategoryId = $category['parent_category_id'];
if($category['parent_category_id'] == 0)
break;
}
else
error_404();
}
header("location: /re-rewting/" . $categoriesName) . "/";
}
}
else
{
if (strpos($page, "?"))
{
$url = explode("?", $page);
$get_vars = explode("&", $url[1]);
for ($i= 0; $i < count($get_vars); $i++)
{
$get_var = explode("=", $get_vars[$i]);
$_GET[$get_var[0]] = $get_var[1];
}
include $url[0];
exit();
}
else
{
include $page;
exit();
}
error_404();
}
}
}
if (isset($_GET['page']))
{
$page = $_GET['page'];
echo $_GET['page'];
if(!empty($page))
{
is_available($page, $dbc);
}
}
else
{
include "poczatek.html";
exit;
}
ob_flush();
?>
1)Do czego służy i czy ma znaczenie w pozycjonowaniu linijka "header("HTTP/1.0 404 Not Found");"? Gdy wywoływała się funkcja error_404() to w Firefox wszystko było OK wyświetlał się plik 404.shtml, ale w Google Chrome wyświetlał się domyślny komunikat tej przeglądarki. Gdy usunąłem tę linijkę to i w Google Chrome wyświetlała się strona 404.shtml
2)Czy ten skrypt nie obciąża za bardzo serwera?
3)Czy moc ze starych linków (np. skrypt.php?id=1) przejdzie na nowe (np. /dzial/)?
4)Czy jest coś co mogę jeszcze poprawić w tych plikach?
Re: Zamiana brzydkich URL na ładne - problem
1) zwracając nagłówek informujesz bota, użytkownika, że strona, którą odwiedził nie istnieje, nie ma to specjalnie wpływu na pozycjonowanie, aczkolwiek dobrze jeśli URL'e, które nie istnieją zwracają taki error.
2) nie
3) nie, musisz dodać R=301 wszędzie w .htaccess po przekierowaniu
4) jak wyżej
2) nie
3) nie, musisz dodać R=301 wszędzie w .htaccess po przekierowaniu
4) jak wyżej
Re: Zamiana brzydkich URL na ładne - problem
Gdy dodałem R=301 do:
To czy Google-bot będzie wiedział, że moc ze starego linku (np. skrypt.php?id=1) ma przenieść na nowy link (np. /dzial/), a nie na np. index.php?page=skrypt.php-__-id=1 ? Bo przecież ta linijka przenosi na np. index.php?page=skrypt.php-__-id=1, a dopiero skrypt index.php przenosi za pomocą header("location: /dzial/") na np. /dzial/.
Code: Zaznacz cały
RewriteCond %{QUERY_STRING} ^([a-zA-Z0-9]+=[a-zA-Z0-9]+)$
RewriteRule ^([^(index)][a-zA-Z0-9-_/.]+\.php)$ index.php?page=$1+-+%{QUERY_STRING} [R=301,L]
Re: Zamiana brzydkich URL na ładne - problem
Nie analizowałem Twojego kodu PHP.
W takim wypadku przed headerem z location daj:
Strasznie to zamieszałeś.
W takim wypadku przed headerem z location daj:
Code: Zaznacz cały
Header( "HTTP/1.1 301 Moved Permanently" );
Re: Zamiana brzydkich URL na ładne - problem
Bardzo dziękuję za pomoc.