簡體   English   中英

漂亮的URL和SEO友好的URL?

[英]Pretty URL & SEO-friendly URL?

我目前正在使用Apache 2.2

我可以做一些簡單的事情

RewriteRule ^/news$ /page/news.php [L]
RewriteRule ^/news/(.*)$ /page/news.php?id=$1 [L]

但是如果我想發送2個參數怎么辦

http://www.example.com/link/param1/param1_value/param2/param2_value

最后,我還想知道實現SEO友好的URL,例如stackoverflow

雖然我可以訪問帶有URL的頁面,例如

http://www.example.com/doc_no/

只需使用

http://www.example.com/doc_no/this-is-the-article

給我一些示例片段的建議。

我知道PHP symfony框架允許您執行此操作。

工作原理:在apache配置中,使用mod_rewrite將所有傳入的請求重定向到單個入口點(在symfony中,這稱為“前端控制器”)

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

在此前端控制器中,您將創建一個“請求”對象,其中包含URL提供的所有信息。

例如,您可以說“ /”之后的第一件事是要調用的PHP文件的名稱,而其他所有內容都是參數和值,因此: http : //example.com/file/id/2將調用文件。 PHP的ID = 2

為此,只需使用一些reg exp並仔細設計“請求”類即可。 對於上面的示例,“ Request”類應同時提供getRequestedAction()和getParameter(string parameter)方法。 當完全填充“請求”對象時,將使用getRequestedAction()方法以調用正確的文件/操作/方法。

如果您選擇使用URL上的reg exp和_GET數組的解析填充請求對象的參數數組,則可能會到達以下位置: http : //example.com/file/id/2是與http://example.com/file?id=2相同(兩者都可以使用)

您可以選擇是否忽略擴展名(http://example.com/file.html與http://example.com/file相同)。

最后,對於某些URL,您可以選擇忽略最后一個'/'之后的所有內容。 因此: http : //example.com/question/3/where-is-khadafihttp://example.com/question/3/is-linux-better-than-windows相同

在不同的file.php中,只需使用$ request-> getParameter('id')即可獲取“ id”參數的值,而不是使用_GET或_POST數組。

重點是

  1. 將所有傳入流量重定向到單個“前端控制器”
  2. 在該文件中,創建一個“請求”對象,其中包含運行站點所需的所有信息
  3. 根據該“請求”對象中包含的信息,調用正確的操作(php文件)
  4. 在操作內部,使用此請求對象來獲取URL中包含的參數

希望這可以幫助

注意Google聲明他們更喜歡news.php?id=$1而不是news/$1因為它們更容易檢測到該變量。 當增加變量的數量時,這更相關,因為僅看您的第一個示例就有些混亂:

http://www.example.com/link/param1/param1_value/param2/param2_value

如果一個參數是通用的(例如類別),則可以始終將兩者組合:

http://www.example.com/param1/?id=param2_value

如果需要多個參數並且不是臨時搜索,則應該重新評估設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM