将 GET 变量从 PHP 转换为友好的 URL?

Transform GET vars from PHP into friendly URLs?

我遇到了一个很常见的问题,我需要转换我的网站。com/page.php?id=1&title=page-title 到 site.com/page-title-id

我认为这可以很容易地在 .htaccess 文件中添加一些 mod_rewrite 但我觉得它可能不是最友好的 SEO 方法,你怎么看?

另一种方法是在 PHP 代码中进行一些更改,但我对这种语言比较陌生,我不知道 PHP 附带的所有库和函数] 并且可以让我在这里的生活更轻松。

到目前为止,我在我的 .htaccess 中正在做的事情(不起作用):

# BEGIN ocasion_system
<IfModule mod_rewrite.c>
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php\?title=([^&\s]+)&?
RewriteRule (.*)\.php$ //%1/? [L,R=301]

RewriteRule ^([^/]+)/([^/]+)/$ .php?title= [QSA,L]
</IfModule>

我的page.php有

//all includes up here..
$page = new Page();
$page->__set('title', $_GET["title"]); //this is how i set up my page interface, please don't laugh

if ($_GET["title"] != NULL){    
        $page = get_page($page, $db);       
        echo '<pre>';
        print_r($page);//works as intended when i access http://localhost/page.php?title=default prints all the Page object with that title.
        echo '</pre>';
    }

我想 PHP 中的解决方案会好得多,因为我不想让搜索引擎认为我在隐藏网站或重定向或其他任何东西,只希望 URL像 site.com/page-title-id 或类似的。

编辑:在 .htaccess

中尝试了不同的方法

I need to transform my site.com/page.php?id=1&title=page-title into site.com/page-title-id

您可以用这个替换您当前的 htaccess 代码(假设它位于文档根文件夹中)

<IfModule mod_rewrite.c>
  Options +FollowSymLinks -MultiViews

  # Turn mod_rewrite on
  RewriteEngine On
  RewriteBase /

  RewriteCond %{THE_REQUEST} \s/page\.php\?id=([0-9]+)&title=([^\s&]+)\s [NC]
  RewriteRule ^ %2-%1? [R=301,L]

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^([^/]+?)-([0-9]+)$ page.php?id=&title= [L]
</IfModule>

此代码将重定向旧的 url 格式 (http://example.com/page.php?id=1&title=page-title) to its new format (http://example.com/page-title-1),然后在内部将新格式重写回旧格式(没有任何无限循环)