mod重写动态php值
我在mod重写的第一次尝试。我在下面有一个可怕的链接,它把你带到一个个人资料页面。在profile页面上,我根据I参数获取用户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'])); ?&
<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
)