mod_rewrite的难题

时间:2015-05-04 13:07:27

标签: php apache .htaccess mod-rewrite url-rewriting

我遇到了一个棘手的问题: 在我的.htaccess中,我有以下RewriteRules,它们不起作用。


    RewriteRule u/(.*)/ user.php?u=$1 [L,QSA]
    RewriteRule u/(.*) user.php?u=$1 [L,QSA]
    RewriteRule user/(.*)/ user.php?u=$1 [L,QSA]
    RewriteRule user/(.*) user.php?u=$1 [L,QSA]
    RewriteRule view/(.*)/ view.php?file=$1 [L,QSA]
    RewriteRule view/(.*) view.php?file=$1 [L,QSA]
    RewriteRule show/(.*)/ show.php?img=$1 [L,QSA]
    RewriteRule show/(.*) show.php?img=$1 [L,QSA]
    RewriteRule report/(.*) report.php?img=$1 [L,QSA]
    RewriteRule report/(.*)/ report.php?img=$1 [L,QSA]
    RewriteRule search/tag/(.*) search.php?t=$1 [L,QSA]
    RewriteRule search/tag/(.*)/ search.php?t=$1 [L,QSA]
    RewriteRule search/(.*) search.php?q=$1 [L,QSA]
    RewriteRule search/(.*)/ search.php?q=$1 [L,QSA]
    RewriteRule bug/view/(.*)/ bug.php?view=$1 [L,QSA]
    RewriteRule bug/view/(.*) bug.php?view=$1 [L,QSA]
    RewriteRule bug/(.*) bug.php?step=$1 [L,QSA]
    RewriteRule bug/(.*)/ bug.php?step=$1 [L,QSA]

然而,当我输入RewriteRule为


    RewriteRule ^ http://example.com [R, L]

我会被转发,所以它有效。

等解决方案

    RewriteRule u/(.*)/ http://example.com/user.php?u=$1 [L,QSA]

不行。还


    RewriteRule /u/(.*)/ user.php?u=$1 [L,QSA]

等没有成功。

我遇到问题,因为我最近搬到了新服务器。但是,配置似乎一切都很好。

有没有人知道我做错了什么?

2 个答案:

答案 0 :(得分:1)

您是否搜索过可能的答案?

我发现了这个: Why does this RewriteRule work with [R] but not with [QSA,L]?

  

似乎:

     

与Apache 2.2配对时的FastCGI版本似乎不喜欢   rewriterule index.php / $ 1。相反,它更喜欢index.php?$ 1但有些   CMS不喜欢这样。我使用的CMS不喜欢这样。所以   unone的评论使用?$ 1是在正确的轨道,但因为我有   没有解释,我正在使用的CMS(Open Journal Systems)没有   

之后使用pathinfo的东西,然后它才起作用。

     

解决方案是从FastCGI更改为常规CGI。

检查该网址下的其他答案,他们有有效点,这可能对您的情况有所帮助。

答案 1 :(得分:0)

对我而言,您似乎使用了错误的语法。尝试将您的模式放在双引号中,看看它是否有效(请记住:SegmentLineIntersection)。像这样:

 RewriteRule "u/(.*)/" "http://example.com/user.php?u=$1" [L,QSA]

或者更好的方法是将您的模式包含在:^(作为字符串的开头)和$(作为字符串的结尾):

 RewriteRule ^u/(.*)$ http://example.com/user.php?u=$1 [L,QSA]