htaccess url重写行代码之间的冲突

时间:2013-01-19 02:31:30

标签: .htaccess url-rewriting

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

#----------------------------------------------------------------------
# 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 它的行为就像我要去个人资料页面..

2 个答案:

答案 0 :(得分:0)

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

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

完成后,对/$1的重定向也将与通用规则([a-zA-Z0-9_-]+)匹配。由于您还进行了^buzz/([^/]*)$重写,因此似乎不应存在之前的RedirectMatch。如果您想匹配buzz/xxxx,请仅使用RewriteRule而不是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规则,只需在第一个/添加一个/?可选的尾随{/ 1}}。

答案 1 :(得分: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_-]+)$更具包容性,并且还包括动态更新。