重写不按预期工作

时间:2013-08-08 16:22:20

标签: .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]

这是做什么转换? to#除非url有以下之一:

/admin
/access.php

所以如下的网址将无法获得?转换:

http://mysite.com/access.php?login=special

但是,现在我要求使用一个搜索参数? (而不是#)被允许使用:

http://mysite.com/?s=somesearchstring&submit=Search

我正在努力试图让它发挥作用。按照现行规则?得到转换,我最终得到:

http://mysite.com/#s=somesearchstring&submit=Search

但我不需要转换它吗?到#。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

更改

RewriteCond %{QUERY_STRING} .

RewriteCond %{QUERY_STRING} !(^|&)s=.*?(&|$)
RewriteCond %{QUERY_STRING} !(^|&)submit=Search(&|$)

如果 ?#存在,则不会将s修改为submit。它们可能以他们喜欢的任何顺序出现。

答案 1 :(得分:0)

似乎添加以下作品:

RewriteCond %{QUERY_STRING} !^s=

但我担心我对原因缺乏清晰认识可能会导致一些问题。

以下是我的理解:

如果查询字符串

!(does not)^(start with)s=

我错过了什么吗?乍一看,这似乎解决了我的问题,但也许它不完整或容易出错?