我的鏈接,如「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();
}
}
?>
如果有人看到了一些錯誤(我是新來這個領域),我會很高興聽到他們的聲音,並學習如何做這個事情做得更好......
只是確保轉義您在SQL查詢中使用的輸入變量。在這種情況下,因爲你想要一個整數,只需要生成'$ produs = intval($ _ GET [「id」]);'。 – Prody 2012-07-14 11:24:24
我剛剛修改爲$ produs = intval($ _ GET [「id」]);但你能告訴我更多關於逃生變量..我是新來的PHP和我不知道很多... – user1483138 2012-07-14 12:06:51
基本上,任何時候你使用用戶輸入將它添加到SQL查詢,你必須妥善消毒它。作爲一個非常簡單的解決方案,你可以在PHP中使用'mysql_real_escape_string'。您希望這樣做,以便惡意用戶無法在查詢中注入額外的SQL代碼。 – Prody 2012-07-14 12:49:32