0

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 >> 301'd 到我的域,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]
4

1 回答 1

4

好的,您在这里尝试了三个部分,我将分别解决它们。

在我们开始之前,您只需要拥有一个

RewriteEngine on

它只需要打开一次。

您还应该设置:

Options -MultiViews

因为 MultiViews 可能会在这里引起一些奇怪的问题。

重定向到万维网

!=您当前的规则应该有效,但您可以使用前缀 on稍微简化它们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]

但我愿意接受建议。

301ing所有死链接

不要那样做。如果链接不存在,它应该返回一个 404 状态的页面。如果您想将访问者从死链接重定向到您的主页,请在您的 404 页面中放置一个链接。

于 2013-04-01T00:10:26.193 回答