第二次重写永远不会执行

时间:2016-08-19 17:25:55

标签: apache mod-rewrite url-rewriting

我有这个重写

RewriteCond %{THE_REQUEST} /(?:user_profile)?\?user_id=([^\s&]+)\sHTTP [NC]
RewriteRule ^ /%1? [L,R]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /user_profile?user_id=$1 [L]

正确地允许我使用域/用户名作为网址。

但是当我再添加一个类似的重写规则时,第二个不喜欢上面那个。

RewriteCond %{THE_REQUEST} /(?:group)?\?group_id=([^\s&]+)\sHTTP [NC]
RewriteRule ^ /%1? [L,R]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^group/([^/]+)/?$ /group?group_id=$1 [L]

任何人都可以帮我改写第二个像这个域/组/组名一样返回的人,同时保持第一个像域/用户名一样工作。

1 个答案:

答案 0 :(得分:0)

你有两个问题。第一个问题是您希望在重定向请求时保留group/前缀。

RewriteCond %{THE_REQUEST} /(?:group)?\?group_id=([^\s&]+)\sHTTP [NC]
RewriteRule ^ /group/%1? [L,R]

第二个问题是在第一次重写后,您将/group/groupname重写为/group?group_id=groupname。这将使/group与用户名规则匹配。您希望阻止此前缀匹配:

RewriteCond %{REQUEST_URI} !^/group
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /user_profile?user_id=$1 [L]