Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 重写规则和散列_.htaccess_Mod Rewrite_Hash - Fatal编程技术网

.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,但看不出它是如何相关的。