.htaccess 重写规则和散列
我有一个网页有这样丑陋的网址.htaccess 重写规则和散列,.htaccess,mod-rewrite,hash,.htaccess,Mod Rewrite,Hash,我有一个网页有这样丑陋的网址 DOMAINNAME/gallery.php#filter=.filtername DOMAINNAME/artwork/filtername/ 我希望他们看起来像这样 DOMAINNAME/gallery.php#filter=.filtername DOMAINNAME/artwork/filtername/ 我在我的.htaccess文件中尝试过这个 RewriteRule ^artwork/([^.]+)/ gallery.php#filter=.$
DOMAINNAME/gallery.php#filter=.filtername
DOMAINNAME/artwork/filtername/
我希望他们看起来像这样
DOMAINNAME/gallery.php#filter=.filtername
DOMAINNAME/artwork/filtername/
我在我的.htaccess文件中尝试过这个
RewriteRule ^artwork/([^.]+)/ gallery.php#filter=.$1 [NE]
但这并不能解决问题。它只会转到DOMAINNAME/artwork/
如果您在URL中添加#
,则必须执行完全重定向,因为#
部分仅在浏览器中解释:
RewriteRule ^artwork/([^./]+)/?$ /gallery.php#filter=.$1 [L,NE,NC,R=302]
我刚刚在我的环境中尝试过这个,似乎Apache在执行内部重写时会吞下所有内容,包括
#
。无论是否使用flag,都会发生这种情况
因此,唯一的解决方案似乎是使用常规查询字符串,例如
RewriteRule ^artwork/([^.]+)/ gallery.php?filter=.$1 [L]
或者用斜线分隔过滤器
RewriteRule ^artwork/([^.]+)/ gallery.php/filter=.$1 [L]
重写规则看起来不错。您可能需要添加一个
L
标志和一个绝对路径,例如RewriteRule^artwork/([^.]+)//gallery.php#filter=.$1[L,NE]
谢谢您的回复,Olaf,但我仍然得到了相同的结果。例如,如果我在地址栏中输入DOMAINNAME/artwork/misc/,它会显示DOMAINNAME/artwork/,因此它会忽略过滤器。谢谢。是的,这确实有效,但因为它是一个重定向,它只显示了原始的丑陋URL,这不是我想要实现的。我没有办法清理URL吗?没有,正如我在回答中提到的那样,
之后的部分甚至没有发送到web服务器,所以即使您使用
进行内部重定向,浏览器也不会知道。好吧,看来我只能和您住在一起了。我正在使用的JS内置了散列。把它改成一个?或者/会占用我没有的资源。谢谢你的帮助。看来我误解了这个问题。客户端发送包含哈希#
的URL?您想重定向到另一个URL,这样它就会显示在浏览器中?我想在浏览器中键入,例如artwork/misc/,这会被解释为gallery.php#filter=.misc,但会显示为artwork/misc/Ok,但是,为什么查询字符串不是一个可行的解决方案呢?您可以使用GET变量filter
并相应地执行操作。哈希似乎被嵌入到代码中,我对JS一无所知,甚至不能考虑更改它。我确实知道PHP和GET,但看不出它是如何相关的。