需要修改的.htaccess语法代码



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页面放一个链接。

最新更新