Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mod重写动态php值_Php_Apache_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

mod重写动态php值

mod重写动态php值,php,apache,.htaccess,mod-rewrite,url-rewriting,Php,Apache,.htaccess,Mod Rewrite,Url Rewriting,我在mod重写的第一次尝试。我在下面有一个可怕的链接,它把你带到一个个人资料页面。在profile页面上,我根据I参数获取用户 <a href="engineer-profile.php?country=<?php echo str_replace(' ','-',strtolower($row['country']));?>&area=<?php echo str_replace(' ','-',strtolower($row['area'])); ?&

我在mod重写的第一次尝试。我在下面有一个可怕的链接,它把你带到一个个人资料页面。在profile页面上,我根据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>
现在,如果我重新构造链接,使其看起来如下所示:

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

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

您的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]
engineer-profile.php(示例)
--------------------------------
#.htaccess
#所需格式
#/uk/southport/23/公司名称/
#以下要求指定rewritebase,即:-
重写基/
重写规则^([a-zA-Z\\\-]+)/([a-zA-Z0-9\\\-]+)/([0-9]+)/([a-zA-Z0-9\\\\\-]+)(/?)$/engineer profile.php?国家=$1,地区=$2,地区=$3,公司=$4[NC,L]
#原作中有几处遗漏——不过现在这部作品。demo engineer-profile.php将输出以下内容
排列
(
[国家]=>英国
[区域]=>南港
[i] =>23
[公司]=>公司名称
)

你的号码(23)不匹配
[a-zA-Z_uz]+)
。很酷,我的实际链接是对的,因为我认为这是我不太理解的地方。当我链接到页面时,我使用/uk/southport/1/company/链接,或者我使用原始链接,mod rewrite为我重写名称?我尝试了这两种方法,但都没有成功。只是没有找到页面不,它不会为您转换它-您需要使用新链接(/uk/southport/1/company)。我刚刚注意到您的末尾有一个结束斜杠。我会编辑我的回答抱歉这里有一个正确的链接。如果您搜索builder,uk,pr97tf,您将看到链接的位置。当您单击“配置文件”时,它会自动关闭。parrotsearch.co.uk/search-form.phpawesome。当我使用这个例子并顺便感谢@RamRaider时,我发现页面没有找到。然而,engineer-profile.php确实存在,因为它在mod rewrite之前就已经工作了
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]
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
)