URL重写不起作用

时间:2012-07-12 13:00:18

标签: url mod-rewrite url-rewriting rewrite

你能告诉我为什么这次重写不会传递第二个值吗? tt值传入%1但名称不在%2

RewriteBase /
RewriteRule ^wedding-hair-and-make-up-images-([^/]*)-(.*)\.php$ franchisee-gallery.php?franchise_name=$1&id_tt=$2 [L]
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD|TRACE)\ /franchisee-gallery.php
RewriteCond %{QUERY_STRING} name=([^\&]*) 
RewriteCond %{QUERY_STRING} tt=(.*) 
RewriteRule ^franchisee-gallery.php$ wedding-hair-and-make-up-images-%1-%2.php? [R,L]  

1 个答案:

答案 0 :(得分:1)

%N请求最后一个条件的匹配组,因此%1是条件的匹配: RewriteCond%{QUERY_STRING} tt =(。*)

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#RewriteCond

RewriteCond反向引用:这些是%N(1 <= N <= 9)形式的反向引用,它提供对模式的分组部分(再次,在括号中)的访问,从最后匹配RewriteCond在当前条件下。

对于您的情况,您可以将“franchisee-gallery.php”的访问权重写为另一个PHP,进行重定向(通过HTTP Header Location )。我无法弄清楚如何通过重写来实现这一目标。也许使用PERL外部重写程序,使用RewriteMap。


解决方案成立!使用自定义环境变量,可以将匹配的值存储在临时变量中!

RewriteEngine on
RewriteBase /
RewriteRule ^wedding-hair-and-make-up-images-([^/]*)-(.*)\.php$ franchisee-gallery.php?franchise_name=$1&id_tt=$2 [L]

RewriteCond %{REQUEST_URI} ^/franchisee-gallery.php
RewriteCond %{QUERY_STRING} name=([^&]*)
RewriteRule .* - [E=name:%1]

RewriteCond %{REQUEST_URI} ^/franchisee-gallery.php
RewriteCond %{QUERY_STRING} tt=([^&]*)
RewriteRule .* - [E=tt:%1]

RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD|TRACE)\ /franchisee-gallery.php
RewriteRule ^franchisee-gallery.php$ wedding-hair-and-make-up-images-%{ENV:name}-%{ENV:tt}.php? [R,L]