.htaccess 重定向到子目录中的文件(如果存在)
我有一个包含以下代码的“.htaccess”文件:.htaccess 重定向到子目录中的文件(如果存在),.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,我有一个包含以下代码的“.htaccess”文件: (它应该重定向名称,如“P7-product_number_7”) 检查文件(在“缓存”目录中)的现有路径可以正常工作,但重定向不起作用。 为什么? 我曾尝试使用“重写规则^(.*)$/cache/$1.html[L]”代替第一个重写规则,但它也不起作用。 (如果HTML文件不存在(在/cache/中),重定向工作正常,“.htaccess”和“cache/”目录在“/var/www”目录中,因此%{REQUEST\u URI}是“/P7-pr
(它应该重定向名称,如“P7-product_number_7”) 检查文件(在“缓存”目录中)的现有路径可以正常工作,但重定向不起作用。
为什么? 我曾尝试使用“重写规则^(.*)$/cache/$1.html[L]”代替第一个重写规则,但它也不起作用。
(如果HTML文件不存在(在/cache/中),重定向工作正常,“.htaccess”和“cache/”目录在“/var/www”目录中,因此%{REQUEST\u URI}是“/P7-product\u number\u 7”)您的规则正在循环,因为您没有检查URI的开头。您可能会注意到,
标签
$\u GET参数是产品编号_7.html,最后是.html
。这意味着应用第一条规则,然后规则循环,但第二次第一个条件失败(因为没有P7-product_number_7.html.html
),因此应用第二条规则:
/P7-product\u number\u 7
%{DOCUMENT\u ROOT}/cache%{REQUEST\u URI}.html-f
->true([A-z])([0-9]+)-([^/]*)?$
->true/cache/P7-product\u number\u 7.html
/P7-product\u number\u 7
!=<代码>/cache/P7-product_number_7.html,重写引擎循环:
/cache/P7-product\u number\u 7.html
%{DOCUMENT\u ROOT}/cache%{REQUEST\u URI}.html-f
->false(/cache/cache/P7-product\u number\u 7.html.html
不存在)([A-z])([0-9]+)-([^/]*)?$
->true(匹配URI的/cache/P7-product\u number\u 7.html部分)/index.php?type=P&id=7&label=product\u number\u 7.html
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
或者,您可以简单地匹配正则表达式中URI的开头:
# need ^ ---v
RewriteRule ^([A-z])([0-9]+)-([^/]*)?$ /cache%{REQUEST_URI}.html [B,L]
# and here -v:
RewriteRule ^([A-z])([0-9]+)-([^/]*)?$ index.php?type=$1&id=$2&label=$3 [B,L]
# need ^ ---v
RewriteRule ^([A-z])([0-9]+)-([^/]*)?$ /cache%{REQUEST_URI}.html [B,L]
# and here -v:
RewriteRule ^([A-z])([0-9]+)-([^/]*)?$ index.php?type=$1&id=$2&label=$3 [B,L]