Google的WMT工具将我的网站视为2个不同的网站,因此我想实现从非www到www的301重定向。主网站www.mysite.com使用Flash构建,包含wordpress博客的文件夹分别保存在www.mysite.com/blog/.
在Wordpress文件夹中有一个带有以下脚本的.htaccess文件,由于有2个RewriteRules和RewriteCond条目,因此看起来不正确。我应该删除其中的一个还是需要它们?
为什么!-f和!-d在那里 - 他们做了什么?
我的主要Flash网站也应该拥有自己的.htaccess文件,用于301非www到www?
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
答案 0 :(得分:2)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
#If the file requested is index.php from the current folder(here: blog)
#do not do anything
RewriteRule ^index\.php$ - [L]
#if other requests are not regular files or directories,
#redirect it to /blog/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
请勿删除上述任何规则。它们很好并且很好需要。事实上,我建议你也加上这个:
RewriteCond %{REQUEST_FILENAME} !-l
来自rewritecond apache docs :
-f
,-d
&amp; -l
是CondPatterns的变种。而不是真正的正则表达式字符串。
- ' - d'(是目录) 将TestString视为路径名并测试它是否存在,并且是一个目录。
- ' - f'(是常规文件) 将TestString视为路径名并测试它是否存在,并且是常规文件。
- ' - l'(是符号链接) 将TestString视为路径名并测试它是否存在,并且是一个符号链接。
如果以感叹号('!')作为前缀,则会导致否定其含义。即!-f
表示不是常规文件。
要从non www
重定向到www
个网址,请在.htaccess
的{{1}}中使用此内容:
DocumentRoot
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ www.mysite.com/$1 [L,R=301]
用于永久重定向