.htaccess mod_rewrite规则不起作用

时间:2014-08-11 12:33:29

标签: regex apache .htaccess mod-rewrite

我正在尝试让mod-rewrite在htaccess文件中工作。

我想要实现的网址是:

blog/{id}-{title}/

例如:

http://localhost/blog.php?id=12&title=this-is-a-test

会变成:

http://localhost/blog/12-this-is-a-test/

不,我一直在尝试的是:

RewriteEngine On
RewriteRule ^blog/([0-9]+)-([a-zA-Z-])/$ blog.php?id=$1&title=$2

当我转到http://localhost/blog/12-this-is-a-test/时,我收到404错误,但如果我转到http://localhost/blog.php,则测试页面会显示测试文字。

也许我写的规则不正确,如果是这样,任何人都可以建议编辑或有任何好的教程,我一直在阅读http://httpd.apache.org/docs/2.0/misc/rewriteguide.html但是我还没弄清楚我在哪里出错了。

非常感谢任何帮助,甚至指出我正确的方向,谢谢。

编辑:

我在应用重定向规则的每个链接上都得到了这个:

http://localhost/C:/Apache/htdocs/test5/blog/1-Lorem-ipsum-dolor-sit-amet

我在下面添加了vhost:

<Directory "{path}">
    Options All               
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

我必须清除浏览器缓存,因为它也会导致问题。一旦采取了这两项行动,anubhava的答案就可以解决我的问题。

1 个答案:

答案 0 :(得分:1)

您的正则表达式缺少量词+,导致第二个捕获组失败,因为它只需要1个字符:

Options -MultiViews
RewriteEngine On
RewriteBase /

RewriteRule ^blog/([0-9]+)-([a-zA-Z-]+)/?$ blog.php?id=$1&title=$2 [L,NC,QSA]

最好关闭MultiViews,因为您的php文件名blog.php与目录名blog相同。