不能重写URL,并追加在.htaccess参数 [英] Fail to rewrite url and append parameters in .htaccess

查看:171
本文介绍了不能重写URL,并追加在.htaccess参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是我的.htaccess规则,它的工作原理:

Here's my .htaccess rule which works:

RewriteCond %{REQUEST_URI}   ^/work
RewriteCond %{QUERY_STRING}   ^foo=bar$
RewriteRule  ^(.*)$   /test.php

不幸的是,如果我要附加一些参数来重写路径这是行不通的:

Unfortunately, if I want to append some parameters to the rewritten path it doesn't work:

RewriteCond %{REQUEST_URI}   ^/work
RewriteCond %{QUERY_STRING}   ^foo=bar$
RewriteRule  ^(.*)$   /test.php?par=new

如果我加入 [R = 301] 那么它也能工作,但我不想添加它,因为我不希望用户看到地址变更

If I add [R=301] then it works too, but I don't want to add it because I don't want the user see the address changed:

RewriteCond %{REQUEST_URI}   ^/work
RewriteCond %{QUERY_STRING}   ^foo=bar$
RewriteRule  ^(.*)$   /test.php?par=new   [R=301]

为什么没有第二人在工作?我错过了什么? 环境: Ubuntu的12.04,XAMPP(阿帕奇/ 2.4.4)

Why isn't the 2nd one working? Did I miss something? Environment: Ubuntu 12.04, XAMPP(Apache/2.4.4)

感谢。

修改1

每<一href="http://stackoverflow.com/questions/20023601/internal-url-rewrite-no-longer-working-after-upgrading-apache-to-2-4">Internal URL重写的Apache升级到2.4 后不再工作,这似乎是相关的Apache 2.4的bug。

Per Internal URL rewrite no longer working after upgrading Apache to 2.4, this seems to be a bug related to Apache 2.4.

的.htaccess:

.htaccess:

RewriteCond %{QUERY_STRING} ^foo=bar$ 
RewriteRule ^work/(.*)$ /test.php?par=new   [L]

登录时执行卷曲的http://艾莉森/工作/富=酒吧-v

[Thu Aug 28 15:36:39.728123 2014] [rewrite:trace3] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1e05820/initial] [perdir /home/amareknight/Projects/firstmg/root/alison/] strip per-dir prefix: /home/amareknight/Projects/firstmg/root/alison/work/ -> work/
[Thu Aug 28 15:36:39.728141 2014] [rewrite:trace3] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1e05820/initial] [perdir /home/amareknight/Projects/firstmg/root/alison/] applying pattern '^work(.*)$' to uri 'work/'
[Thu Aug 28 15:36:39.728170 2014] [rewrite:trace4] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1e05820/initial] [perdir /home/amareknight/Projects/firstmg/root/alison/] RewriteCond: input='foo=bar' pattern='^foo=bar$' => matched
[Thu Aug 28 15:36:39.728186 2014] [rewrite:trace2] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1e05820/initial] [perdir /home/amareknight/Projects/firstmg/root/alison/] rewrite 'work/' -> '/test.php?par=new'
[Thu Aug 28 15:36:39.728201 2014] [rewrite:trace3] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1e05820/initial] split uri=/test.php?par=new -> uri=/test.php, args=par=new
[Thu Aug 28 15:36:39.728218 2014] [rewrite:trace1] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1e05820/initial] [perdir /home/amareknight/Projects/firstmg/root/alison/] internal redirect with /test.php [INTERNAL REDIRECT]
[Thu Aug 28 15:36:39.728420 2014] [rewrite:trace3] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1fa24a0/subreq] [perdir /home/amareknight/Projects/firstmg/root/alison/] strip per-dir prefix: /home/amareknight/Projects/firstmg/root/alison/work/index.html -> work/index.html
[Thu Aug 28 15:36:39.728436 2014] [rewrite:trace3] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1fa24a0/subreq] [perdir /home/amareknight/Projects/firstmg/root/alison/] applying pattern '^work(.*)$' to uri 'work/index.html'
[Thu Aug 28 15:36:39.728457 2014] [rewrite:trace4] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1fa24a0/subreq] [perdir /home/amareknight/Projects/firstmg/root/alison/] RewriteCond: input='par=new' pattern='^foo=bar$' => not-matched
[Thu Aug 28 15:36:39.728473 2014] [rewrite:trace1] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1fa24a0/subreq] [perdir /home/amareknight/Projects/firstmg/root/alison/] pass through /home/amareknight/Projects/firstmg/root/alison/work/index.html
[Thu Aug 28 15:36:39.728624 2014] [rewrite:trace3] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1f9a360/subreq] [perdir /home/amareknight/Projects/firstmg/root/alison/] strip per-dir prefix: /home/amareknight/Projects/firstmg/root/alison/work/index.html.var -> work/index.html.var
[Thu Aug 28 15:36:39.728640 2014] [rewrite:trace3] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1f9a360/subreq] [perdir /home/amareknight/Projects/firstmg/root/alison/] applying pattern '^work(.*)$' to uri 'work/index.html.var'
[Thu Aug 28 15:36:39.728660 2014] [rewrite:trace4] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1f9a360/subreq] [perdir /home/amareknight/Projects/firstmg/root/alison/] RewriteCond: input='par=new' pattern='^foo=bar$' => not-matched
[Thu Aug 28 15:36:39.728675 2014] [rewrite:trace1] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1f9a360/subreq] [perdir /home/amareknight/Projects/firstmg/root/alison/] pass through /home/amareknight/Projects/firstmg/root/alison/work/index.html.var
[Thu Aug 28 15:36:39.728741 2014] [rewrite:trace3] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1fa24a0/subreq] [perdir /home/amareknight/Projects/firstmg/root/alison/] strip per-dir prefix: /home/amareknight/Projects/firstmg/root/alison/work/index.php -> work/index.php
[Thu Aug 28 15:36:39.728760 2014] [rewrite:trace3] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1fa24a0/subreq] [perdir /home/amareknight/Projects/firstmg/root/alison/] applying pattern '^work(.*)$' to uri 'work/index.php'
[Thu Aug 28 15:36:39.728779 2014] [rewrite:trace4] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1fa24a0/subreq] [perdir /home/amareknight/Projects/firstmg/root/alison/] RewriteCond: input='par=new' pattern='^foo=bar$' => not-matched
[Thu Aug 28 15:36:39.728794 2014] [rewrite:trace1] [pid 14865] mod_rewrite.c(468): [client 127.0.0.1:33092] 127.0.0.1 - - [alison/sid#1b438a0][rid#1fa24a0/subreq] [perdir /home/amareknight/Projects/firstmg/root/alison/] pass through /home/amareknight/Projects/firstmg/root/alison/work/index.php

我的index.php位于/工作目录下,它似乎阿帕奇只是忽略了INTERNEL_REDIRECT并加载的index.php。

I have index.php located in /work directory and it seems Apache just ignores the INTERNEL_REDIRECT and loads the index.php.

推荐答案

您可以有你的规则,像这样在你的根目录的.htaccess:

You can have your rule like this in your root .htaccess:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^foo=bar$ [NC]
RewriteRule ^work /test.php?par=new [L,QSA,NC]

这将在内部重写像 /工作/ ABC?富=酒吧 /test.php?foo=bar&par=new网址

这篇关于不能重写URL,并追加在.htaccess参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆