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/
。如果可能的话,这是否正确?
答
的.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";
}
?>
的第一条规则很可能正在处理第一和防止第二规则从匹配。尝试交换他们的顺序,或者在第一个规则的'^ test /'之后添加一个'$',这样如果url中不仅仅包含'test /',它就不会匹配。 –