mod_rewrite alter 1查询字符串的元素

时间:2013-01-31 02:45:06

标签: apache .htaccess mod-rewrite

基于mypage.php上的动态链接调用Flash电影。 mypage.php嵌入了Flash播放器。链接看起来像mypage.php?moviefolder=folder1/folder2&swfTitle=sometitle.swf。在每个链接点击(每个href)上解析mypage.phpFolder2始终相同,但movieTitle.swf是动态的。有时会调用子文件夹(folder2/subfolder2/sometitle.swf)。

mod_rewrite可以允许查询字符串反映folder2,而是默默地提供folder3以及偶尔的子文件夹吗?我会将所有文件放在folder3中。目标是让用户不知道swfs在哪里。再次提前致谢!

1 个答案:

答案 0 :(得分:1)

使用RewriteCond匹配查询字符串的内容(因为它们未在RewriteRule指令中读取,您可以提取swfTitle=sometitle.swf并将folder1/folder3替换为{ {1}}中的{1}}。

这将使用像folder1/folder2这样的正则表达式模式来匹配下一个moviefolder(表示另一个查询参数)的所有内容。

([^&]+)

希望您不会得到重写循环,因为重写的&将不会与第二次匹配。 # Capture everything after folder2 into %1 RewriteCond %{QUERY_STRING} moviefolder=folder1/folder2([^&]+) [NC] # Capture everything in the swfTitle param into %2 # Both conditions must be matched... RewriteCond %{QUERY_STRING} swfTitle=([^&]+) [NC] # Then silently rewrite mypage.php to substitute folder3, # and pass in the original swfTitle captured above RewriteRule ^mypage\.php$ mypage.php?moviefolder=folder1/folder3%1&swfTitle=%2 [L] 允许不区分大小写的匹配。

我确实设法使用示例输入<{3}}在http://htaccess.madewithlove.be/成功测试了这一点:

folder1/folder3