Php mod_重写规则处理基本目录,但第二个规则处理任何子目录?

Php mod_重写规则处理基本目录,但第二个规则处理任何子目录?,php,apache,.htaccess,redirect,mod-rewrite,Php,Apache,.htaccess,Redirect,Mod Rewrite,我正在尝试使用mod_rewrite来简化我的网站结构,但事实证明这很困难 我需要example.com/inventory/的任何精确匹配项来重定向到example.com/#search/(我有这个功能) 我需要有任何匹配example.com/inventory/(*)的URL才能正常加载,而不是重定向到/#search/(我有这个功能) 我需要将example.com/#search/(.)重定向到example.com/inventory/$1,以下情况除外: -example.com

我正在尝试使用mod_rewrite来简化我的网站结构,但事实证明这很困难

  • 我需要example.com/inventory/的任何精确匹配项来重定向到example.com/#search/(我有这个功能)
  • 我需要有任何匹配example.com/inventory/(*)的URL才能正常加载,而不是重定向到/#search/(我有这个功能)
  • 我需要将example.com/#search/(.)重定向到example.com/inventory/$1,以下情况除外: -example.com/#搜索/订购里程/ -example.com/#搜索/订单年份/ -example.com/#search/order price/example.com/#search/page-(0-9)+/-example.com/#search/makemodel-()/
  • 以下是我到目前为止的情况:

    RewriteEngine On 
    RewriteCond %{REQUEST_URI} ^inventory/(.*)$ 
    RewriteRule ^(.*)$ https://example.com/inventory/$1 [R,L]
    
    RewriteCond %{REQUEST_URI} ^#search/(.*)$ 
    RewriteCond %{REQUEST_URI} !^#search/(order-miles|order-year|order-price|makemodel)$ 
    RewriteRule ^(.*)$ https://example.com/inventory/$1 [R,L]
    
    RewriteCond %{REQUEST_URI} ^inventory$ 
    RewriteRule ^(.*)$ https://example.com/#search/ [R,L]
    
    看起来,除了第二组条件和相应的规则外,所有这些都正常工作

    /#搜索/订购里程/正确加载(以及其他3个子文件夹结构),但其他URL,例如:

    应该重定向到 但事实并非如此


    有人看到更好的方法吗?

    您不能在规则的URL中使用
    #
    。服务器甚至没有发送url哈希。它不知道什么是散列,甚至不知道url上是否存在散列。浏览器不会将其与请求一起发送。它们仅由客户端使用,通常js会使用散列后传递的信息发出单独的ajax请求。如果您查看该请求的开发者工具网络选项卡,您会发现初始页面加载甚至不包括它。您是对的。在消除了这两种情况后,一切正常。非常感谢。