【问题标题】:Htaccess rewrite rule not working when REQUEST_URI does not start with different pattern当 REQUEST_URI 不以不同的模式开头时,Htaccess 重写规则不起作用
【发布时间】:2022-01-18 01:49:53
【问题描述】:

我正在尝试重定向任何不以特定模式开头的请求。

例如

mydomain.com/test/one/a

mydomain.com/test/one/b

mydomain.com/用户/名称/a

mydomain.com/用户/名称/b

因此,任何与 mydomain.com/test/onemydomain.com/user/name 不匹配的请求都会重定向到某个页面或网址。

到目前为止,我可以匹配以下内容

RewriteCond %{REQUEST_URI} ^(/test/one|/user/name) [NC]

RewriteRule .* - [F]

所以任何以 /test/one 或 /user/name 开头的 url 都可以正确重定向。

但是当我试图 用 ! 否定条件时,它会重定向每个请求!

RewriteCond %{REQUEST_URI} !^(/test/one|/user/name) [NC]

RewriteRule .* - [F]

但我希望所有请求都重定向,除了 REQUEST_URI 具有类似的模式 ^(/test/one|/user/name)

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-rewriting http-status-code-403


    【解决方案1】:

    不需要RewriteCond,只需将模式提供给RewriteRule,例如

    RewriteRule ^test/one - [F]
    RewriteRule ^user/name - [F]
    

    这将forbid 请求,以/test/one/user/name 开头。


    要重写对某个网页的所有其他请求,请附加另一个 RewriteRule

    RewriteRule ^ /some/web/page.html [L]
    

    要重定向客户端而不是重写,请将标志 R|redirect 添加到规则中

    RewriteRule ^ /some/web/page.html [R,L]
    

    【讨论】:

      【解决方案2】:

      使用您显示的示例,请尝试遵循 htaccess 规则文件。请确保在测试您的 URL 之前清除您的浏览器缓存。

      在这里使用THE_REQUEST 变量让 apache 检查条件。

      RewriteEngine ON
      RewriteCond %{THE_REQUEST} !\s/(?:test/one/|user/name/)\S+\s [NC]
      RewriteRule ^ - [F,L]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多