1)我正在尝试301所有非www到www(包括文件)
例如 /subdirectory/ + /subdirectory/1.jpg
(所有可能与www。)
2)我试图排除ONLY但是所有的.html和.php文件都不显示,并且只希望将非跟踪版本编入索引,其余的将是301到我的域名
例如 /example.html或.php>> / example
例如 /example.html或.php>>不工作+没有索引
例如 /示例仅适用于工作且仅被编入索引(以避免重复内容)
3)我正在尝试301所有死链接和404到我的域
例如 / deadlink或/deadlink.pdf>> 301我的域名,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]
答案 0 :(得分:4)
好的,你在这里尝试了三个部分,我将分别解决这些问题。
在开始之前,您只需要一个
RewriteEngine on
只需要打开一次。
您还应该设置:
Options -MultiViews
因为MultiViews可能会在这里引起一些奇怪的问题。
您当前的规则应该有效,但您可以使用!=
上的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页面中添加一个链接。