PHP $ _GET的.htaccess重写

问题描述:

的htaccess:

RewriteEngine on 
RewriteRule ^test/ test.php 
RewriteRule ^test/success/ test.php?success 

test.php的:

<?php 
if(isset($_GET['success'])) 
    echo "SUCCESS"; 
else 
{ 
    echo "nothing is set"; 
} 
?> 

当我尝试访问test.php/test.php?success它的工作原理和回声报 “SUCCESS”。我希望它以相同的方式工作,但在htaccess中覆盖。我只是想让它在我打开它时回应那条消息,如/test/success/。如果可能的话,这是否正确?

+0

的第一条规则很可能正在处理第一和防止第二规则从匹配。尝试交换他们的顺序,或者在第一个规则的'^ test /'之后添加一个'$',这样如果url中不仅仅包含'test /',它就不会匹配。 –

的.htaccess重写规则是从上往下看,

如果我们将此您输入的字符串,我们得到

  • 开始与/test/success/
  • 比赛RewriteRule ^test/ test.php因此它成为test.php
  • test.php不匹配RewriteRule ^test/success/ test.php?success

我们以test.php结束。

但是,这不是你想要的,因为你希望最后的url重写为test.php?success而不是其他文件。有一个简单的办法解决这个问题,我们简单交换了2行重写规则使较长的一个被列为第一

所得.htaccess文件:

RewriteEngine on 

RewriteRule ^test/success/ test.php?success 

RewriteRule ^test/ test.php 

RewriteEngine叙述上

重写规则^测试/ $ test.php的

重写规则^测试/成功/ $ test.php的?成功

它也适用于你。如果您在成功后不需要斜线,则可以将其删除。并且您需要打开测试/成功 您必须关闭.htaccess重写网址,以在其中重定向您的网址。

RewriteEngine on 

RewriteRule ^test/([a-zA-Z0-9-]*) test.php?subpage=$1 [NC] 

而且你可以有这样的联系:/测试/ 放,在这里,任何文本/

test.php 
<?php 
if(isset($_GET['subpage'])) 
    echo $_GET['subpage']; 
else 
{ 
    echo "nothing is set"; 
} 
?>