mod_rewrite只接受短划线&字母数字,否则抛出404

时间:2012-04-09 13:24:38

标签: php html regex mod-rewrite

我正在使用mod_rewrite将URL的结尾传输到我的php脚本,这将充当一个微观问题。我的网址看起来像这样: mysite.com/articles/some-article-about-css

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

我有疑问:

  1. 我不确定如何使用mod_rewrite只接受字母数字w /破折号的最佳方法。我在互联网((?:[a-z]+)?(?:[0-9]+)?-?)+上发现了这个规则,它显然不允许双破折号甚至更好,但它长而混乱。我可以使用另一种(更短,更快)的规则吗?

  2. 我想验证此规则对我正在尝试完成的内容有效。我对mod_rewrite不太满意: RewriteRule ^/articles/((?:[a-z]+)?(?:[0-9]+)?-?)+ /index.php?action=read&article=$1

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

2 个答案:

答案 0 :(得分:1)

我不相信复杂的正则表达式。试试这个

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

答案 1 :(得分:1)

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

RewriteRule ^ / articles / - [R = 404]

仅限字母数字和破折号