为什么这个RewriteRule不起作用?

时间:2009-07-10 12:52:37

标签: .htaccess mod-rewrite

我正在开发一个包含3个页面的网站(主页,第2页,第3页)...在第二页中有一个导航栏,有4个项目(subpage1,subpage2,...),我用它们用url变量替换页面2的内容!换句话说,第2页导航栏的第二项指向:

http://localhost/uk/page2/index.php?pg=subpage2

项目3指向:

http://localhost/uk/page2/index.php?pg=subpage3

现在我想通过.htaccess使用更友好的网址!

我写过:

RewriteEngine On
RewriteRule /uk/page2/(.*)/$ /uk/page2/index.php?pg=$1
放在根目录中的.htaccess中的

但是不起作用! 请帮忙!!!

3 个答案:

答案 0 :(得分:9)

当你使用.htaccess时,你没有前导斜杠:

RewriteEngine On
RewriteRule ^uk/page2/(.*)/$ /uk/page2/index.php?pg=$1

答案 1 :(得分:2)

天儿真好,

我建议在高级别启用RewriteLog配置选项,以检查实际发生的情况。

Has AllowOverides been enabled?</obvious> (-:

好像你运气不好.htaccess

  

令人难以置信的mod_rewrite在每个目录上下文中提供了URL操作,即在.htaccess文件中,尽管这些操作在URL被转换为文件名后很长时间才能实现。它必须是这种方式,因为.htaccess文件存在于文件系统中,因此处理已经到了这个阶段。换句话说:根据此时的API阶段,任何网址操作都为时已晚。 - Apache mod_rewrite doc.s(强调我的)

答案 2 :(得分:0)

最后可能是尾随斜杠,所以改变一下:

RewriteEngine On
RewriteRule /uk/page2/(.*)/$ /uk/page2/index.php?pg=$1

到此:

RewriteEngine On
RewriteRule ^(.*)uk/page2(/?)(.*)$ /uk/page2/index.php?pg=$3

您应该检查的另一件事是您在httpd.conf文件中将AllowOverride设置为All,而不是None。如果设置为None,则不允许使用.htaccess执行任何操作。