我的链接就像“http://www.shinylook.ro/product.php?id=58”,我将其重写为
"http://www.shinylook.ro/produs/58/saboti-dama/"
使用此代码:
RewriteRule ^produs/([0-9]+)/([a-zA-Z0-9_-]+)\/ product.php?id=$1 [L]
但我无法将旧链接重定向到新链接。如果有人输入旧的,则重定向到新的。
我试过这个:
RewriteRule ^product.php?id=$1 produs/([0-9]+)/([a-zA-Z0-9_-]+)\/ [L,R=301]
但它不起作用。
如何解决此问题?
编辑:
我设法写了PHP代码......你可以在www.shinylook.ro/redirect_old_links.php?id=44
尝试。
但我无法解决htaccess重写代码重定向到该文件......
我使用了RewriteRule ^product.php?id=([0-9]+) redirect_old_links.php?id=$1 [R=301,NC]
但它不起作用。
编辑2:
我设法解决了问题...... htaccess看起来像
RewriteCond %{ENV:REDIRECT_STATUS} !=200
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteRule ^product.php$ /redirect_old_links.php/ [L]
RewriteRule ^produs/([0-9]+)/([a-zA-Z0-9_-]+)\/$ product.php?id=$1 [L]
PHP代码如下:
<?
include "_storescripts/connect_to_mysql.php";
error_reporting(E_ALL);
ini_set('display_errors', '1');
if (isset($_GET['id'])) {
$produs = $_GET['id'];
$sql = mysql_query("SELECT nume_produs FROM products WHERE id='$produs'"); // Chose the product
// ------- We check if it exists ---------
$existCount = mysql_num_rows($sql); // Count
if ($existCount == 1) {
while($row = mysql_fetch_array($sql)){
$nume_brut = $row["nume_produs"];
$nume = explode(" ", $nume_brut);
}
$nume_final = strtolower($nume[0]."-".$nume[1]);
$name = urlencode($nume_final);
header("location: http://www.shinylook.ro/produs/$produs/$name/", TRUE, 301);
}
else {
echo ("This product id does not exist!");
exit();
}
}
?>
如果有人看到一些错误(我是这个领域的新手),我会很高兴听到他们并学习如何做得更好......
答案 0 :(得分:2)
您可能希望将旧链接重定向到新网址,以便人们在博客上粘贴新链接时使用新链接。
使用RewriteRule
时,Apache无法猜测名称的其余部分,以便执行重定向的其他部分。
它可以删除它:
produs/58/saboti-dama/ -> product.php?id=58
但是为了反过来又会在哪里获得名称?
为此,您应该编写一个redirect_old_links.php
文件,该文件只会重定向到新位置:
http://php.net/manual/en/function.header.php
示例:
用户访问
product.php?id=58
RewriteRule product.php?id=([0-9]+) redirect_old_links.php?id=$1 [L]
在redirect_old_links.php
:
mysql_select("SELECT name FROM PRODUCTS WHERE ID = ".$_GET["id"]);
// the above line is just so you get the point,
// please create a proper query with PDO and proper escaping
$id = urlencode($product_id);
$name = urlencode($product_name);
header("Location: produs/$id/$name/");
抱歉,我很长时间没有使用过PHP,你必须自己查看这些函数的文档,我不记得了mysql_select / fetch过程。 Urlencode也可能是错误的。
但我希望你明白这一点。