1)我试图301所有的非www的www的(包括文件)
。 /subdirectory/ + /subdirectory/1.jpg
(所有可能与www.)
2)我试图排除只有但所有的。html和。php文件显示,并希望只有非尾随版本被索引,其余的是301到我的域
。/example.html或。php>>/example
。/example.html或。php>>不工作+不被索引
。/example只工作和只被索引(以避免重复的内容)
3)我试图301所有死链接和404到我的域名
。/deadlink或/deadlink.pdf>> 301d到我的域名,example.com
这是我目前拥有的代码,但我不确定它是否100%正确。有人可以回复这3个任务验证语法吗?谢谢。
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . / [L,R=301]
好的,你在这里有三个部分要尝试,我将分别解决它们。
在我们开始之前,你只需要有一个
RewriteEngine on
只需要打开一次。
你还应该设置:
Options -MultiViews
as MultiViews会导致一些奇怪的问题。
重定向到WWW
您当前的规则应该可以工作,但您可以在RewriteCond
上使用!=
前缀来简化它们:
RewriteCond %{HTTP_HOST} !=www.example.com
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
去掉.php
和.html
后缀
这里需要两组独立的规则:一组用于从url中删除后缀,另一组用于在内部读取它们。
让我们先做后半部分,因为这更容易:
RewriteCond %{SCRIPT_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [L]
RewriteCond %{SCRIPT_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L]
有了这个,但是,删除后缀有点棘手,而不会与继续尝试将它们放回去的规则相冲突。我能想到的最好的方法是:
RewriteCond %{THE_REQUEST} .(html|php)
RewriteRule ^(.*).(html|php)$ $1 [R=301,L,NC]
但我愿意听取建议。
删除所有无效链接
不要那样做。如果链接不存在,它应该返回一个带有404状态的页面。如果你想把访问者从死链接重定向到你的主页,在你的404页面放一个链接。