伪静态之后的URL还带问号【?】报404的解决方法

最近将ASP的博客改为PHP的博客。

朋友用我的域名做验证,是php文件,而我原来是ASP的,所以不冲突。但换了PHP之后,他的文件跟我的文件就冲突了,需要伪静态来跳转一下。这就遇到了一个小问题。

我想把  index.php?code=123 重写为  aaa.php?code=123

访问URL是带问号的,其实我就想把index.php通过URLRewrite转换为aaa.php 但URL中带问号,本来以为使用\转义一下就可以,但一直报404错误。

百度找了半天没找到,说是.net什么的问题,其实不对。后来发现一个有关问号的解决方法,第一次没解决成功,又找了一个差不多的解决方法,终于解决了。在这里分享一下。

核心内容是添加访问URL字符串判定,当URL中出现某字符串时此条规则生效,可以避开问号

先把规则发上来看下:

apache的

RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} ^code=(.*)$
RewriteRule ^index\.php$ aaa\.php\?code=%1 [L]

 

IIS的

<rule name="已导入的规则 5" stopProcessing="true">
  <match url="^index\.php$" ignoreCase="false" />
      <conditions logicalGrouping="MatchAll">
          <add input="{QUERY_STRING}" pattern="^code=(.*)$" ignoreCase="false" />
      </conditions>
  <action type="Rewrite" url="aaa.php\?code={C:1}" appendQueryString="false" />
</rule>

 

IIS的正常变量一般都是{R:1}但此次变量是在判断语句中,所以是{C:1}需要注意。

之前说过,条件判断语句只对下一条生效,IIS里的rewrite直接就写在rule里,更直观。

本条规则,只对URL中带code字符串的生效。

仔细又看了一下有关QUERY_STRING的介绍,原来这是服务器变量,用于获取查询字符串。

就是问号后面的内容。

RewriteCond %{QUERY_STRING} ^code=(.*)$  //用于判断问号后面是否有code=这个字符并将=后面的内容赋予为变量

RewriteRule ^index\.php$ aaa\.php\?code=%1 [L]  //是将原问号前的文件写上(猜的),并写上转换后的URL,写上变量。

也找到了一些英文介绍,但英语水平有限,看不懂。好在有一些大神解决了问题。在此也分享一下。

感谢这些大神们:http://www.geekso.com/rewrite/  

l另外在网上找到一个规则,不知道能不能用,没测试。有需要的可以试下

RewriteRule ^(.*)/search\.html(?:(\?.*))* $1/search\.php?$2 [L]

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇