【问题标题】:How do I rewrite a name to an id?如何将名称重写为 id?
【发布时间】:2014-04-29 20:34:20
【问题描述】:

我正在尝试重写以下网址

www.domain.com/category.php?id=13

到:

www.domain.com/category/cat-name

我已经学习了一些 .htaccess 教程,但我不能。我怎样才能让它发挥作用?

【问题讨论】:

  • 您按照教程进行操作,但您不知道吗?
  • 这听起来像是“我什么都没做,希望你为我做这件事”。你尝试了什么?有什么错误?
  • 使用 PHP 变量 $_SERVER['REQUEST_URI'] 可以获得用户请求的路径。使用正则表达式或其他方法解析 URL,然后使用找到的数据加载所需的文件。此方法要求您将所有页面重写到索引文件。这就是 WordPress 和许多其他 CMS 的做法。

标签: .htaccess url


【解决方案1】:

您不能将数字改写为名称,除非您有某种方法可以将该数字转换为名称。这意味着在 http 守护程序级别 (Apache/.htaccess) 您没有足够的信息来重定向它。对于 php 中的重定向,请参阅this

既然你问关于 php 的重写,我也会回答这个问题。没有像在 php 文件中重写这样的事情。内部重写映射一个 url(例如www.domain.com/category/cat-name)并让服务器执行不同的 url(例如www.domain.com/category.php?id=13)。这发生在 http 守护程序级别,在您的情况下是 Apache。

首先在您的 www-root 中创建一个 .htaccess:

RewriteEngine on
RewriteRule ^category/[^/]+$ /category.php

在 category.php 中:

if( strpos( $_SERVER['REQUEST_URI'], 'category.php' ) != FALSE ) {
  //Non-seo url, let's redirect them
  $name = getSeoNameForId( $_GET['id'] );
  if( $name ) {
    header( "Location: http://www.domain.com/category/$name" );
    exit();
  } else {
    //Invalid or non-existing id?
    die( "Bad request" );
  }
}

$uri = explode( '/', $_SERVER['REQUEST_URI'] );
if( count( $uri ) > 1 ) {
  $name = $uri[1];
} else {
  //Requested as http://www.domain.com/category ?
  die( "Bad request" );
}

如果您请求 category.php?id=number,这会将请求重定向到类别/名称,如果您请求类别/名称,则从 url 获取名称

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    相关资源
    最近更新 更多