【问题标题】:mod_rewrite accept only dashes & alphanumeric, otherwise throw 404mod_rewrite 只接受破折号和字母数字,否则抛出 404
【发布时间】:2012-04-21 20:45:50
【问题描述】:

我正在使用 mod_rewrite 将 URL 的末尾传输到我的 php 脚本中,该脚本将充当 microcms。我的网址看起来像这样: mysite.com/articles/some-article-about-css

这会将以下内容传递给我的 PHP 脚本 index.php: index.php?action=read&article=some-article-about-css

我有问题:

  1. 我不确定使用 mod_rewrite 仅接受带破折号的字母数字的最佳方法是什么。我在互联网上找到了这条规则((?:[a-z]+)?(?:[0-9]+)?-?)+,它显然不允许双破折号更好,但它又长又令人困惑。我可以使用另一个(更短、更快)的规则吗?

  2. 我想验证此规则对于我要完成的任务是否有效。我对 mod_rewrite 不太擅长: RewriteRule ^/articles/((?:[a-z]+)?(?:[0-9]+)?-?)+ /index.php?action=read&article=$1

  3. 我可以使用什么规则,以便如果 /articles/ 之后的 url 不是有效的字母数字 /w 破折号 url,自动抛出 404 而不是传递给我的脚本?

【问题讨论】:

    标签: php html regex mod-rewrite


    【解决方案1】:

    RewriteRule ^/articles/([a-zA-Z0-9-]*) /index.php?action=read&article=$1 [QSA,L]

    重写规则 ^/articles/ - [R=404]

    仅适用于字母数字和破折号

    【讨论】:

      【解决方案2】:

      我相信你不需要那种复杂的正则表达式。试试这个

      RewriteRule ^articles/([^a-zA-Z0-9-]*) /index.php?page=$1 [L]
      RewriteRule ^articles(.*) [R=404]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-15
        • 2011-09-30
        • 1970-01-01
        • 1970-01-01
        • 2018-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多