【问题标题】:Second rewrite does never execute第二次重写永远不会执行
【发布时间】:2016-08-22 04:57:44
【问题描述】:

我有这个重写

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]

正确地让我使用域/用户名作为 url。

但是当我添加一个类似的重写规则时,第二个与上面的不一样。

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]

谁能帮我重写第二个返回的像这个域/组/组名一样,同时保持第一个像域/用户名一样工作。

【问题讨论】:

    标签: apache mod-rewrite url-rewriting


    【解决方案1】:

    你有两个问题。第一个问题是您希望在重定向请求时保留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]
    

    【讨论】:

      猜你喜欢
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 2019-12-07
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 2020-01-23
      相关资源
      最近更新 更多