2010-01-24 96 views
1

我用最近購買的php腳本構建了一個客戶端網站,對腳本的支持是可悲的,我希望腳本的固定鏈接對搜索引擎友好,但它們不是。它們之間有空格,這些空格之間並沒有被搜索引擎索引。PHP固定鏈接..怎麼改?

那麼,我該如何更改固定鏈接呢?謝謝大家..

+0

您購買的劇本是否有名字?如果某些開發人員可以查看它,我們可以更好地告訴您在源代碼中進行更改的位置。 – MidnightLightning 2010-01-24 22:06:45

回答

0

urlencode函數將負責URL中的空格。

例如:

<?php 
$base_url = 'http://example.com'; 
$category = urlencode('some thing'); 
$item  = urlencode('Name of an item'); 

echo "<a href=\"{$base_url}/{$category}/{$item}/>{$item}</a>"; 
?> 

這將使鏈接http://example.com/some+thing/Name+of+an+item/其搜索引擎應該是罰款。

而且,假設您正在使用URL重寫(如mod_rewrite),則這些值應該到達您的PHP腳本,就像它們在urlencode函數之前一樣。如果不是,您可以使用urldecode恢復它們。

+0

嗨Atli, 非常感謝您的幫助。我非常感激。 我進入文件,並在我的PHP腳本中搜索'urlencode',發現其中的一些。你想讓我用上面的代碼替換那個代碼嗎? 我想主持人不允許公開鏈接。 === //將匹配的php代碼轉換成函數 $ _include_compiled =「<?php/* Smarty version」。$ smarty - > _ version。「,創建於」.strftime(「%Y-%m - %d%H:%M:%S「)。」\ n「; $ _include_compiled。=「編譯自」。 strtr(urlencode($ params ['resource_name']),數組('%2F'=>'/','%3A'=>':'))。 「*/\ n \ n」; – regguy 2010-01-24 19:56:59

+0

你發佈的那一小段代碼似乎並不是您正在尋找的'urlencode'的正確實例(儘管它似乎是Smarty模板引擎的獨特解釋)。任何其他事件? – MidnightLightning 2010-01-24 22:17:27

+0

我檢查了腳本的客戶區並收到了我的新版本。新版本中有一個讀取文件,它有指示更新sql並替換一些代碼。 現在永久鏈接結構是這樣的。 http://Domainname.com/Arts-Humanities/how-are-you-doing?-|4 我不確定在問題結尾附加的「 - | 4」是否可靠和友好搜索引擎。對此有何想法? 再次感謝您。 – regguy 2010-01-25 04:21:14

1

如果你有50個PHP文件和一個帶有這個「腳本」的.htaccess文件,你可能首先必須找到流過它們的編程路徑。如果您查看.htaccess文件,您應該看到一些ModRewrite行,它們應該以PHP文件名結尾。這是接收(和解碼)永久鏈接的腳本。該文件將是一個開始尋找重寫永久鏈接結構的鉤子的好地方。如果您可以發佈該源代碼(或將其放置在pastebin之類的地方併發布該鏈接),我很樂意看一看。

從您的其他評論之一,它聽起來像至少部分腳本是使用Smarty PHP模板引擎。如果是這樣,如果您可以找到包含「緩存」,「模板」和「templates_c」文件夾(或類似文件夾)的文件夾,則也可以將該文件夾排除在外;這將是用於顯示頁面的模板,而不是任何解碼/編碼腳本。

編輯:看你的.htaccess文件,29行看起來是在一個與文章的永久鏈接交易,它指向view.php,並轉換什麼是永久鏈接到idtitle GET變量。如果可以,發佈view.php的來源,我們將從那裏開始。

編輯2好的,看着view.php獲得了更多的見解。主要是沒有解碼功能; Answerscript引擎會立即丟棄永久鏈接的「標題」部分,並僅通過其ID(管道在URL查詢中的編號;通過將URL的標題部分更改爲任何內容否則,它仍然會獲取正確的頁面)。所以,好消息是當你改變編碼功能時,沒有需要更新的解碼功能。不幸的是,這並沒有告訴我們編碼函數在腳本中的位置。

唯一的線索是,view.php文件包括一個名爲include/functions/import.php文件,我假定有does_post_exist($PID)update_last_viewed($PID)update_your_viewed($USERID),並且update_viewcount_question($PID)函數定義。我們來看看該文件的來源,看看是否有任何其他功能用於導入。另外,include/functions/文件夾中有多少個文件?如果只有少數,發佈所有來源;那裏可能會定義編碼函數。如果有一堆,該文件夾中是否有一個export.php文件(即view.php使用的import.php的對面)?發佈該文件的源代碼,因爲它可能具有編碼功能。

編輯3在那裏,他們分別是:在main.php文件有功能的三重奏:seo_clean_titlesinsert_seo_clean_titlesseo_clean_titles2insert_seo_clean_titles是從一個Smarty的模板中調用的函數(搜索有一個.tpl擴展{insert name="seo_clean_titles"上看到多數民衆贊成使用的所有文件),並seo_clean_titlesseo_clean_titles2之間的區別在於,第一echo ES出來的結果,而第二return s it。但是,所有三個都有行$title = str_replace(" ", "-", $title);,這應該將標題中的所有空格都轉爲連字符。如果你沒有看到結果,那麼代碼可能不會在正確的地方調用這些函數。您可以搜索所有.php文件,並查看是否有其他地方有seo_clean_titlesseo_clean_titles2的調用,並確保結果實際上被用作最終的URL。

編輯4要名「.html」添加到所有網址的結尾:這是在模板文件鏈接到問題頁行:

<a href="{$baseurl}/{$ques[i].seo}/{$title}|{$ques[i].PID}">{$ques[i].title|stripslashes}</a> 

修改成:

<a href="{$baseurl}/{$ques[i].seo}/{$title}|{$ques[i].PID}.html">{$ques[i].title|stripslashes}</a> 

和鏈接將有「.html」結尾。然後,您需要修改view.php解析出的ID號時,剝離名「.html」再次關:$pid = intval($ph);前右,插入以下內容:

if (strtolower(substr($pid, -5)) == ".html") $pid = substr($pid,0,-5); // Remove ".html" if it exists 

應該這樣做!

+0

Hi ML, 非常感謝您的簡單解釋。我有preg_replace(在19個文件(我做了全局搜索)並上傳了htaccess文件http://php.pastebin。com/m4dcdf8e4請看看。 腳本是'answerscript'這是一個問題答案php腳本,但他們的演示現在更新與工作永久鏈接。該腳本在購買時沒有爲我工作的固定鏈接結構。就像我說的,支持不關心更新。 而且,它確實有smarty文件夾(我認爲是一個引擎)與庫文件,如Smarty_Compiler.class,Smarty.class ... 謝謝! – regguy 2010-01-25 04:00:53

+0

難道這是「答案」:http://www.answerscript.com/?是的,它聽起來像是在Answerscript引擎中包含一個完整的Smarty引擎;您可能會在嘗試修復永久鏈接結構時忽略整個「smarty」文件夾,因爲它只會處理頁面的最終顯示。查看我上面的編輯,瞭解更多關於我從'.htaccess'文件收集到的信息。 – MidnightLightning 2010-01-25 13:11:43

+0

@ MidnightLightning - 非常感謝!說真的,你很棒。 我發現view.php內容文件,並已粘貼在這裏http://pastebin.com/m6dc7b983 我想追加沒有。在網址的最後是自動/明顯的?有可能使http://www.sawaal.ibibo.com/這種類型的永久鏈接在最後加上.html標籤。該網站在搜索中的排名非常好。 我很抱歉問這麼多的東西,我不知道你的支持,並幫助我幫助我修復永久鏈接。欣賞很多.. !! – regguy 2010-01-25 16:37:34