1

我一直在研究一小段 php 脚本,花了我几天时间(我是菜鸟)

这是我的代码:

<?php
require ('connect.php');

$requete = mysql_query('SELECT * FROM videos WHERE id="'.$_GET['id'].'"') or die(mysql_error());

if(mysql_num_rows($requete)=='0'){
}else{
    while($resultats = mysql_fetch_array($requete)){ 
?> <!-- some html content --> <?php
    }
}

mysql_close(); 
?>
</body>
</html>

该脚本根据 ID 从我的数据库中检索内容。

http://localhost/mysite/video/atest.php?id=1

我想知道我必须使用哪种 url 重写来检索一些关键字。我想要那种网址:

http://localhost/mysite/video/1-first-video-title

RewriteEngine On

RewriteCond %{REQUEST_URI} !\.(css|png|jpe?g|gif|js|mp3|3gp|ico)$
RewriteRule atest/([a-zA-Z0-9\-]+)-([0-9]+) atest.php?id=$1&url=$2[L,QSA]

出事了吗?

我也想使用它,但屏幕上什么也没显示(找不到此页面)。

if($resultats["url"]!=$_GET["url"]) {
  header ("location:/mysite/video/".$resultats["url"]."-".$resultats["id"]);
}

它在我的表中搜索它找到 URL 关键字。

谢谢!

4

1 回答 1

0

我认为您的问题实际上可能非常简单:RewriteRule 以错误的方式捕获变量,RewriteRule atest/([a-zA-Z0-9\-]+)-([0-9]+) atest.php?id=$1&url=$2[L,QSA]将匹配“atest/example-42”并将其映射到“atest.php?id=example&url=42” - $1 指的是第一个一组括号,第二个是 $2。尝试一个print_r()var_export()$_GET

顺便说一句,该正则表达式在某些极端情况下可能会出错,因为它没有断言 ID 必须出现在最后 - 所以“atest/example-2-word-42”最终可能会选择 ID 为 2 ,而不是 42。添加“$”应该可以解决这个问题:RewriteRule atest/([a-zA-Z0-9\-]+)-([0-9]+)$ atest.php?id=$1&url=$2 [L,QSA]

如果重写规则根本不起作用(您的问题不清楚结果是什么),那么 Apache 的 .htaccess 处理可能有些微妙......

于 2012-08-06T03:22:07.410 回答