【问题标题】:URL Rewrite query database?URL重写查询数据库?
【发布时间】:2012-10-09 23:18:29
【问题描述】:

我正在尝试了解 URL 重写的工作原理。我有以下链接。

mysite.com/profile.php?id=23

我想用用户的名字和姓氏重写上面的 url。

mysite.com/directory/liam-gallagher

从我读过的内容来看,您指定了 url 应该输出的规则,但是如何查询我的表以获取每个用户名?

对不起,如果这很难理解,我自己搞糊涂了!

【问题讨论】:

  • 您只需搜索名称而不是 ID。你能澄清一下你不确定的地方吗?
  • 如果我改为搜索名称,如果我有 2 个同名用户怎么办?
  • @Liam 你不应该!您需要为每个人创建一个唯一的 URL slug!
  • @Liam 你必须防止这种情况发生。或者像 Stack Overflow 那样做 - 查看您的个人资料 URL:他们使用数字 ID 来识别您,但出于 SEO 和美观的目的,他们会在末尾添加您的姓名。

标签: php mysql url url-rewriting seo


【解决方案1】:

类似的东西(只是一个草稿,适应你自己的需要......):

RewriteEngine On
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/([0-9]+)/([-0-9a-zA-Z]+)/?$ /$1/$2.php?id=$3 [L]

【讨论】:

    【解决方案2】:

    我使用的一种方法如下。

    制定重写规则,例如

    mysite.com/directory/(.*)
    

    重定向到:

    mysite.com/profile.php?user=%1
    

    将 %1 作为从规则中捕获的参数。

    然后从个人资料页面上的查询参数中获取用户,并从数据库中获取该用户的 ID。

    http://httpd.apache.org/docs/current/mod/mod_rewrite.html

    【讨论】:

      【解决方案3】:

      你从错误的方向看这个。你不能做那种自动 url 重写。最好是创建一个全面的 url 重写:

      <IfModule mod_rewrite.c>
          RewriteEngine On
          RewriteBase /
          RewriteRule ^index\.php$ - [L]
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteRule . /index.php [L]
      </IfModule>
      

      并为数据库中的用户创建一个特定的名称,该名称将用作 url。

      +---------+----------+------+-----------+----------------+
      | user_id | username | name | surname   | url            |
      +---------+----------+------+-----------+----------------+
      |      23 | liam     | Liam | Gallagher | liam-gallagher |
      +---------+----------+------+-----------+----------------+
      

      现在当有人访问您的http://mysite.com/directory/liam-gallagher 时,您可以阅读最后一个条目并在您的数据库中找到user_id,然后让您的脚本完成剩下的工作。

      另一种方法是 Pekka 建议的。创建一个类似 http://mysite.com/directory/23/liam-gallagher 的 url 并从链接中读取 id。但我个人不喜欢那种网址。在我看来,它们只是快速/懒惰的解决方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-07
        • 1970-01-01
        • 1970-01-01
        • 2021-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多