2

我正在尝试发布一个我知道在 Stack Overflow 周围有很多答案的问题。但是,出于某种原因,我似乎无法获取其中的信息以进行单击。我将在问题末尾发布我的消息来源。

问题是,我如何user_id从 URL 中提取一个 & mod_rewrite 它显示用户名。

而不是这个:

domain/user/index.php?user_id=1

我明白了:

domain/username

我已经根据我的 .htaccess 文件的需求定制了其他 SO 答案:

<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On
  RewriteOptions MaxRedirects=1
  RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 
  RewriteCond %{REQUEST_FILENAME} -d [NC] 
  RewriteRule .* - [L]
  RewriteRule ^user/([^/]+)$ index.php?user_id=$1
</IfModule>

if我的用户页面顶部的语句如下所示:

if (isset($_GET['user_id']) || isset($_GET['username']) && queryUserId($user_id)) {
  // Render Page Content
} else {
  header('Location: sign_up.php');
}

我的queryUsername功能如下所示:

function queryUsername($username) {
    $conn = dbConnect('read');
    $sql = "SELECT * FROM users WHERE user_id = '".$username."'";
    $result = $conn->query($sql) or die(mysqli_error($conn));
    $row = $result->fetch_assoc();
    return $row['username'];
    $username = $row['username'];
}

我已经成功地为用户实现了唯一的 URL,并且在将不同的 user_id 附加到我的 URL 时可以很好地访问帐户配置文件,那么我缺少什么来将用户名写入 URL 而不是变量字符串和文件夹结构?

干杯!

其他问题:

直接将用户名添加到 URL PHP

从 PHP 中的 URL 获取用户名

使用 mod rewrite 使用用户名变量更改 URL

添加字节文章

初学者的 URL 重写

4

1 回答 1

3

根据您的信息,此行是错误的:

RewriteRule ^user/([^/]+)$ index.php?user_id=$1

它至少应该是:

RewriteRule ^user/([^/]+)$ /user/index.php?user_id=$1    // for a url like domain/user/username

或使用您的描述:

RewriteRule ^([^/]+)$ /user/index.php?user_id=$1    // for a url like domain/username

此外,您没有username在显示的代码中设置任何名称为 的变量,因此$_GET['username']不需要检查。

您在 php 中的检查应类似于:

if ( isset($_GET['user_id']) && queryUserId($_GET['user_id']) ) {

除此之外,您不应该使用已弃用的mysql_*函数并使用准备好的语句,因为您现在有 sql 注入问题。

另请注意,return在彼此之后使用两个语句仅返回第一个值。

编辑:用户 ID 和用户名之间似乎有些混淆。如果 url 中的值是用户名,您最好username在 .htaccess 文件和 php 中都调用它以避免与用户 ID 混淆:

RewriteRule ^([^/]+)$ /user/index.php?username=$1    // for a url like domain/username}

if ( isset($_GET['username']) && queryUserName($_GET['username']) ) {

在函数中(使用不推荐使用的函数只是为了说明......):

function queryUserName($username) {        
    $conn = dbConnect('read');
    $sql = "SELECT * FROM users WHERE username = '".$username."'";
    ...
}
于 2012-08-11T19:16:15.937 回答