【问题标题】:Rejecting urls using PHP $_GET and .htaccess使用 PHP $_GET 和 .htaccess 拒绝 url
【发布时间】:2012-10-28 13:57:22
【问题描述】:

我只有一行index.php

<?php echo $_GET['a']; ?>

如果我输入url:

http://localhost/test/?a=abc.....

我明白了

abc.....

但如果我创建.htaccess 并写:

RewriteEngine on
RewriteRule ^([a-z]+)$ ?a=$1

如果我输入url:

http://localhost/test/abc.....

我只得到abc(没有点.....

为什么会这样?

如果发送了abc..... 字符串,我想得到一个404 error。我该如何存档?

【问题讨论】:

    标签: php .htaccess get


    【解决方案1】:

    试试

    RewriteRule ^([a-z]+)$ ?a=$1 [L]
    RewriteRule .* 404.php
    

    如果第一个规则匹配,它会将值放入a,否则他会将用户发送到404.php

    另一个编辑

    对不起,一开始我误解了你的问题。

    您的正则表达式仅捕获拉丁(英文)字母,此处:^([a-z]+)$,因此如果您想包含点,请使用:^([a-z\.]+)$,或者如果您想捕获任何内容,请使用:^(.*)$

    原创 - 我将其保留在这里,因为它可能仍然对您有用

    使用

    RewriteRule ^([a-z]+)$ ?a=$1 [QSA]
    

    这将在您的重写规则之后传递查询字符串。

    有关该主题的更多信息,请尝试this article

    【讨论】:

    • a-z 其实这些都是拉丁字母^^
    • Bene docet, qui bene distinguit
    • 感谢您的回答,但没有任何改变!如果我正在输入 abc .....(在查询末尾带有点),我还没有收到 404 错误。
    • 你应该得到 a=abc.... 然后自己重​​定向它们。一分钟后我会给你另一个选择
    猜你喜欢
    • 2012-03-27
    • 2016-02-09
    • 1970-01-01
    • 2017-08-14
    • 2015-01-26
    • 2021-10-11
    • 2011-05-16
    • 1970-01-01
    • 2014-09-03
    相关资源
    最近更新 更多