.htaccess 重写未按预期工作

.htaccess 重写未按预期工作,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,在我的htaccess中,我转换?通过以下方式# # The below 2 lines will convert a ? to a # in the query. RewriteCond %{REQUEST_URI} !^\/*(admin|access.php) RewriteCond %{QUERY_STRING} . RewriteRule ^(.*) /$1#%{QUERY_STRING}? [R=301,L,NE,NC] 这是转换吗?至#除非url包含以下内容之一: /admin

在我的htaccess中,我转换?通过以下方式#

# The below 2 lines will convert a ? to a # in the query.
RewriteCond %{REQUEST_URI} !^\/*(admin|access.php)
RewriteCond %{QUERY_STRING} .
RewriteRule ^(.*) /$1#%{QUERY_STRING}? [R=301,L,NE,NC]
这是转换吗?至#除非url包含以下内容之一:

/admin
/access.php
那么像下面这样的url就不会得到正确的结果了?转换:

http://mysite.com/access.php?login=special
但是,现在我需要一个搜索参数,使用?(不是#)允许使用:

http://mysite.com/?s=somesearchstring&submit=Search
我正挣扎着想让它发挥作用。按照目前的规则?转换后,我得到:

http://mysite.com/#s=somesearchstring&submit=Search
但我不需要转换它?到a#


有什么建议吗?

似乎增加了以下工作:

RewriteCond %{QUERY_STRING} !^s=
但我担心我对原因缺乏清晰的理解可能会导致一些问题

以下是我的理解:

如果查询字符串

!(does not)^(start with)s=
我遗漏了什么吗?乍一看,这似乎解决了我的问题,但可能不完整或容易出错?

改变

RewriteCond %{QUERY_STRING} .


如果同时存在
提交
,则不会将
修改为
#
。他们可能会以他们喜欢的任何顺序出现。

我真的不明白你想要什么。。。你是第一个皈依宗教的人吗?然后你说你不想要。删除重写规则,您就完成了。。。您不想转换的字符串的典型特征是什么?将其添加到异常中^\/*(admin | access.php | someting)谢谢。下面是我的答案,虽然有效,但缺乏答案。你的很完美。
RewriteCond %{QUERY_STRING} !(^|&)s=.*?(&|$)
RewriteCond %{QUERY_STRING} !(^|&)submit=Search(&|$)