1

我在这两个代码之间有问题

#----------------------------------------------------------------------
# Hide File Extentions
#----------------------------------------------------------------------
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

#-----------------------------------------------------------------------
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?username=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?username=$1 [L]
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
RedirectMatch 301 ^/buzz/(.*)$ http://buzz.perghhh.com/$1
#-----------------------------------------------------------------------
RewriteRule ^buzz/([^/]*)$ /buzz.php?buzz=$1 [L]

当我输入这样的网址时http://example.com/buzz/17 它就像我要去个人资料页面一样..

4

2 回答 2

0

在链接的完整 htaccess 中,您有以下重定向:

RedirectMatch 301 ^/buzz/(.*)$ http://buzz.perghhh.com/$1

完成后,该重定向/$1也将与通用规则匹配([a-zA-Z0-9_-]+)。由于您也进行了^buzz/([^/]*)$重写,因此以前的内容似乎RedirectMatch不应该存在。如果要匹配buzz/xxxx,请仅使用 theRewriteRule而不是RedirectMatch.

此外,Apache 的重写规则是通过第一次匹配来处理的,因此buzz/后面没有任何内容与通用profile.php规则匹配。您只需将其移至通用规则之上。始终将特定规则放在通用规则之前。

RewriteEngine On
RewriteRule ^buzz/([^/]*)$ /buzz.php?buzz=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/?$ profile.php?username=$1 [L]

我还profile.php通过简单地在第一个规则中添加一个可选的尾随/替换了第二个规则/?

于 2013-01-19T02:44:03.910 回答
0

只需更改顺序

RewriteEngine On
RewriteRule ^buzz/([^/]*)$ /buzz.php?buzz=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?username=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?username=$1 [L]

您以 [L] 结束行,这意味着这将是 (L)ast 规则,并且^([a-zA-Z0-9_-]+)$更具包容性,并且还将包括嗡嗡声。

于 2013-01-19T02:44:25.213 回答