我遇到了一个棘手的问题: 在我的.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]
等没有成功。
我遇到问题,因为我最近搬到了新服务器。但是,配置似乎一切都很好。
有没有人知道我做错了什么?
答案 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]