1

我正在使用 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 而不是传递给我的脚本?

4

2 回答 2

2

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

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

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

于 2012-04-09T13:49:06.740 回答
1

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

RewriteRule ^articles/([^a-zA-Z0-9-]*) /index.php?page=$1 [L]
RewriteRule ^articles(.*) [R=404]
于 2012-04-09T13:41:14.887 回答