我有一个工作网站,在谷歌排名至少500页。
所有页面在页面末尾都有.html。
现在我要删除所有网页的.html,但让Google中的网页(.html
)保留索引。
搜索后我找不到正确的答案。 我知道吗?是可选的。我在彼此之后尝试了2条规则,但也没有工作。
这是我现在的htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*).html$ find_page.php?redirect=$1&%{QUERY_STRING} [L,QSA]
我尝试添加:
RewriteRule ^(.*)$ find_page.php?redirect=$1&%{QUERY_STRING}
因此,如果网址不包含扩展名,请使用此规则,否则请使用普通规则(使用htaccess
)
我应该期望我的规则应该是这样的:^(.*)(?\.html)$
所以我的目标是:有或没有html应该工作,但.php
不应该工作: - )
答案 0 :(得分:0)
尝试
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.html
您不需要find_page.php
进行重定向。正如其他答案中所提到的,http://server/folder/file
和http://server/folder/file.html
对用户来说是相同的,但对Google来说则不同。
这不会影响PHP,文件夹和其他内容。它只是尝试将“.html”添加到请求的URL,如果它没有指向文件或文件夹。
我已经检查过,即使用户使用像1.html#bookmark1
答案 1 :(得分:0)
好的解决了我的问题。
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*[^.#?\ ]+\.html([#?][^\ ]*)?\ HTTP/
RewriteRule ^(([^/]+/)*[^.]+)\.html find_page.php?redirect=$1&%{QUERY_STRING} [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ find_page.php?redirect=$1&%{QUERY_STRING} [L,QSA]
使用此选项,将检查页面是否具有.html可选结尾。如果有,第一条规则将匹配,否则将更进一步使用最后没有html的第二条规则
答案 2 :(得分:0)
为什么要寻找复杂的解决方案?
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.html$ find_page.php?redirect=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)?$ find_page.php?redirect=$1 [L,QSA]
这会重写对该php脚本的所有请求,添加原始"文件名"作为参数"重定向"并保留所有查询参数。这就是你在问题中要求的。
但是警告:你可以这样做,它将允许重写请求,例如page"重定向"为.../redirection?somearg
或.../redirection.html?somearg
。但对于谷歌而言,两个请求都是完全不同的页面。这将 not 帮助您在转换到新请求方案时保留任何评级。
一般的注意事项:如果你可以控制http服务器配置,那么总是更喜欢将这些规则放在hosts配置中而不是{ {1}}样式文件。众所周知,这些文件容易出错,使事情变得复杂,难以调试并且确实使服务器速度变慢。它们只应在两种情况下使用:如果您不可以控制http服务器配置,或者您需要脚本对规则集进行动态更改(这一直是一种非常不安全的事情)。