0

この書き換えで 2 番目の値が渡されない理由を教えてください。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]  
4

1 に答える 1

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ヘッダーの場所を介して)。Rewrite でこれを作成する方法がわかりません。おそらく、RewriteMap を使用して、PERL 外部書き換えプログラムを使用します。


ソリューション設立!カスタム環境変数を使用すると、一致した値を一時変数に保存できます!

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]
于 2012-07-12T13:41:32.407 に答える