当我输入非www时,RewriteRule ^(.*)$ FRAMEWORK.php?%
部分会显示。有人可以帮助纠正或建议这种情况发生的原因。
我不知道这行是什么。如果我删除它,该网站将无法加载。
# Mod Rewrite
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ FRAMEWORK.php?%{QUERY_STRING}&resource=$1& [L]
# index redirect
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.html\ HTTP/
RewriteRule ^(([^/]+/)*)index\.html$ http://%{HTTP_HOST}/$1 [R=301,L]
# non-www (non-canonical) to www
RewriteCond %{HTTP_HOST} !^(www\.|staging\.|$) [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
答案 0 :(得分:1)
RewriteRule ^(.*)$ FRAMEWORK.php?%{QUERY_STRING}&resource=$1& [L]
完成该规则后,将开始新一轮的重写(在.htaccess中使用重写时总是如此)。
# non-www (non-canonical) to www
RewriteCond %{HTTP_HOST} !^(www\.|staging\.|$) [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
因此,当在下一轮评估此规则时,重写的URL路径已经是FRAMEWORK.php
,因此这是$1
捕获的内容 - 因为这是一个外部重定向,它会显示出来之后在地址栏中。
因此,您应该切换这两个规则的顺序 - 首先将非www重写为www。完成后,重定向发生,因此不再进行重写。
然后,当 new 请求到达服务器时,非www条件不再为true,之后您应该能够毫无问题地重写FRAMEWORK.php
。