服务项目:网站建设、仿站、程序开发、APP开发设计、移动网站开发设计、企业网站设计、电子商务网站开发、网站维护、网站推广、UX/UI 、HTML5、CSS3、JS / Jquery ...
四川浚浚科技有限公司
四川浚浚科技有限公司 (开发设计官网)TEL : 15308000360 / QQ : 38585404

您的位置:首页 > 技术经验 > 服务器 > 正文

Apache Rewrite ? 匹配问号的写法
技术支持服务电话:15308000360 【7x24提供运维服务,解决各类系统/软硬件疑难技术问题】

把 /abc?id=123  =>  /def.php?id=123 的写法:

 
RewriteEngine on
RewriteCond %{QUERY_STRING} ^id=(.+)$
RewriteRule ^/abc$ /def.php?sid=%1 [L]

若此篇文章还不能解决您的问题,请联系QQ:38585404  (有偿技术支持)
 
RewriteRule 不会去匹配 ? 后面的字符串,需要用RewriteCond来匹配
参考:http://lists.apple.com/archives/web-dev/2006/Mar/msg00005.html
 
附件:
1楼:
Options +FollowSymlinks
RewriteEngine on
# Set the RewriteBase to "/" for the root level to base everything on... I guess.
RewriteBase /
RewriteRule ^oldpage.php(.+) newpage.php$1&otherid=0 [R]
-------------------------------------------------
The $1 should have all the variable stuff in it from the php.
So I'm looking for it to essentially do this:
oldpage.php?id=1 redirects to newpage.php?id=1&otherid=0
Why is this not working? Any help would be appreciated.
 
2楼:
Because the RewriteRule directive doesn't parse anything beyond the path portion of the requested URL. If you want to capture the query string, you have to use a RewriteCond statement to store the query string in a regex back-reference. You can then make use of the RewriteCond's back-references in a succeeding RewriteRule statement. There's actually a shortcut for doing this (check the QSA flag in the mod_rewrite docs), but you need to modify the query string in the rewritten URL, so you can't use that.
 
Give this a try:
 
RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^oldpage.php newpage.php?otherid=0&%1 [R]
 
-Brian
 
3楼:
So I fiddled around and came up with this:
 
RewriteRule ^oldpage.php newpage.php?otherid=0 [QSA,R]
 
Why does this work? The only thing I can figure is that the query 
string is simply added to the end (as is says in the docs) of the new 
page. But I'm not even referencing the query string in the first 
part. Do I not need to do that? Does QSA take whatever the query 
 
4楼:
Hey,
mod_rewrite is the swiss army knife of web deployment, so how could this be
OT? ;-)
 
Firstly, you're missing a question mark in your rewrite rule, every request
will at least start with a SLASH (/) and then adding QSA to your rewrite
rule might help in passing over query strings.
(QSA = QeryStringAppend)
 
^ matches the begining of the requested URI which will always start with a
slash as in: 
http//www.apple.com/hardware
^ protocol
^ host
^ requested URI including /
 
So give this a try:
 
RewriteRule ^/oldpage.php(.*) newpage.php?$1&otherid=0 [QSA,R]
^ ^ ^^^
this is needed you missed this this QSA is new
 
or even
RewriteRule ^/oldpage.php(.*) newpage.php?$1&otherid=0 [QSA,R=301]
(R=301 makes the redirect a PERMANENT redirect)
 
I'd even go so far to add a Rewrite Condition, so the rule doesn't have to
be run for all requests:
 
RewriteCond %{REQUEST_URI} ^/.*\.php.* [NC]
RewriteRule ^oldpage.php(.*) newpage.php?$1&otherid=0 [QSA,R=301]
 
([NC] turns on case insensitivenes on the matches so .PHP=.php etc.)
 
Also to debug problems with ModRewrite, it realy helps turning logging on to
see what is actualy happening:
 
RewriteLog "/var/log/httpd/rewrite.log"
RewriteLogLevel 13



上一篇:安装PHP组件uploadprogress
下一篇:vsftp不能上传下载问题解决

相关热词搜索:apache rewrite 伪静态