mod 重写动态 php 值

mod rewrite dynamic php values

我在 mod 重写时的第一次爆炸。我在下面有这个可怕的 link,它会将您带到个人资料页面。在个人资料页面上,我根据 i 参数获取用户。

    <a href="engineer-profile.php?country=<?php echo str_replace(' ','-',strtolower($row['country']));?>&area=<?php echo str_replace(' ','-',strtolower($row['area'])); ?>&i=<?php echo $row['id'];?>&name=<?php echo str_replace(' ','-',strtolower($row['name']));?> " class="btn btn-md btn-bitbucket"><i class="fa fa-user"></i> View Profile</a>

我一直在尝试进行 mod 重写,因此 link 看起来如下

/uk/southport/23/company-name/

到目前为止我的 .htaccess 文件中有这个

  RewriteEngine on
  RewriteRule ^/?([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)$ engineer-profile.php?country=&area=&i=&name= [L]

现在,如果我重组我的 link,它看起来如下:

   <a href="/<?php echo str_replace(' ','-',strtolower($row['country']));?>/<?php echo str_replace(' ','-',strtolower($row['area'])); ?>/<?php echo $row['id'];?>/<?php echo str_replace(' ','-',strtolower($row['name']));?> " class="btn btn-md btn-bitbucket"><i class="fa fa-user"></i> View Profile</a>

我收到页面未找到错误。我也试过

  <a href="engineer-profile/<?php echo str_replace(' ','-',strtolower($row['country']));?>/<?php echo str_replace(' ','-',strtolower($row['area'])); ?>/<?php echo $row['id'];?>/<?php echo str_replace(' ','-',strtolower($row['name']));?> " class="btn btn-md btn-bitbucket"><i class="fa fa-user"></i> View Profile</a>

我还检查了 mod 重写是否开启,它在基本测试中运行良好。有人可以解释我哪里出错了以及我该如何解决吗?

因为您在 link 代中使用 strtolower()str_replace() 空格来破折号,并且其中有数字.. ..您的重写规则案例应该是 ([0-9a-z\_\-]+) 允许数字、小写字母、下划线和破折号,不需要大写值。

您的 URL 与路线不匹配。您需要将您允许的内容扩展到规则中。

RewriteRule ^/?([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_0-9]+)/([a-zA-Z_]+)(/?)$ engineer-profile.php?country=&area=&i=&name= [L]
engineer-profile.php ( example )
--------------------------------
<?php
   echo '<pre>';
   print_r( $_GET );
   echo '</pre>';
?>


<?php
    $id=$row['id'];
    $country=str_replace(' ','-',strtolower($row['country']));
    $area=str_replace(' ','-',strtolower($row['area']));
    $name=str_replace(' ','-',strtolower($row['name']))

    echo "<a href='/$country/$area/$id/$name' class='btn btn-md btn-bitbucket'><i class='fa fa-user'></i>View Profile</a>";
?>

# .htaccess
#  required format
#  /uk/southport/23/company-name/

# the following requires that rewritebase is specified, viz:-
RewriteBase /

RewriteRule ^([a-zA-Z\_\-]+)/([a-zA-Z0-9\_\-]+)/([0-9]+)/([a-zA-Z0-9\_\-]+)(/?)$ /engineer-profile.php?country=&area=&i=&company= [NC,L]

# there were a couple of omissions from original - this works now though. The demo engineer-profile.php will output the following

Array
(
    [country] => uk
    [area] => southport
    [i] => 23
    [company] => company-name
)