Php mod_重写规则处理基本目录,但第二个规则处理任何子目录?
我正在尝试使用mod_rewrite来简化我的网站结构,但事实证明这很困难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
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请求。如果您查看该请求的开发者工具网络选项卡,您会发现初始页面加载甚至不包括它。您是对的。在消除了这两种情况后,一切正常。非常感谢。