Htaccess文件无法正常工作

时间:2014-01-26 21:30:35

标签: apache .htaccess

当我输入非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>

1 个答案:

答案 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