【问题标题】:mod rewrite dynamic php valuesmod重写动态php值
【发布时间】:2015-07-31 13:59:13
【问题描述】:

我在 mod rewrite 上的第一次爆炸。我在下面有这个可怕的链接,它会将您带到个人资料页面。在个人资料页面上,我根据 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>

我一直在尝试重写一个模组,所以链接如下所示

/uk/southport/23/公司名称/

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

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

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

   <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 rewrite 是否打开,它与基本测试一起工作正常。有人可以解释一下我哪里出了问题以及如何解决吗?

【问题讨论】:

  • 您的号码 (23) 与 [a-zA-Z_]+) 不匹配。

标签: php apache .htaccess mod-rewrite url-rewriting


【解决方案1】:
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=$1&area=$2&i=$3&company=$4 [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
)

【讨论】:

  • 太棒了。当我使用此示例并顺便感谢@RamRaider 时,我只是找不到页面。 Engineer-profile.php 肯定存在,因为它在 mod rewrite 之前就可以工作
【解决方案2】:

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

RewriteRule ^/?([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_0-9]+)/([a-zA-Z_]+)(/?)$ engineer-profile.php?country=$1&area=$2&i=$3&name=$4 [L]

【讨论】:

  • 很酷,我的实际链接是对的,因为我认为那是我不太了解的一点。当我链接到页面时,我使用 /uk/southport/1/company/ 链接,还是使用原始链接和 mod rewrite 为我重写名称?
  • 我都试过了,都不管用。只是找不到页面
  • 不,它不会为您转换 - 您需要使用新链接 (/uk/southport/1/company) 我刚刚注意到您的末尾有一个斜杠。我会编辑我的答案
  • 对不起,这里是一个正确的链接。如果您搜索 builder, uk, pr97tf,您将看到链接的位置。当您单击个人资料时。 parrotsearch.co.uk/search-form.php
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多