Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache htaccess rewrite.html不是必需的/是可选的_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache htaccess rewrite.html不是必需的/是可选的

Apache htaccess rewrite.html不是必需的/是可选的,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我有一个工作网站,在谷歌排名中至少有500页。 所有页面的末尾都有.html。 现在我想删除所有页面的.html,但让Google中的页面(带有.html)保留索引 经过搜索,我找不到正确的答案。 我知道那是什么?是可选的。我试过两条规则,但都不管用 以下是我现在的htaccess: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*

我有一个工作网站,在谷歌排名中至少有500页。 所有页面的末尾都有.html。 现在我想删除所有页面的.html,但让Google中的页面(带有
.html
)保留索引

经过搜索,我找不到正确的答案。 我知道那是什么?是可选的。我试过两条规则,但都不管用

以下是我现在的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}
因此,如果URL不包含扩展名,请使用此规则,否则请使用普通规则(使用
htaccess

我希望我的规则应该是这样的:
^(.*)(?\.html)$
所以我的目标是:不管有没有html都应该有效,但是
.php
不应该有效:-)

试试看

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
对于用户来说是一样的,但是对于谷歌来说是不同的

这不会影响对PHP、文件夹和其他内容的访问。如果它不指向文件或文件夹,它只会尝试将«.html»添加到请求的URL

我已经检查过了,它工作得很好,甚至用户使用锚查询uri,比如
1.html#bookmark1
Ok解决了我的问题

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的规则

为什么要寻找复杂的解决方案

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脚本的所有请求,添加原始“文件名”作为参数“重定向”,并保留所有查询参数。这就是你在问题中提出的要求

但是警告:您可以这样做,它将允许将请求重写到例如页面“重定向”为
../redirection?somearg
../redirection.html?somearg
。但对于谷歌来说,这两个请求是完全不同的页面。这不会帮助您在切换到新的请求方案时保留任何评级


还有一个一般性的附带说明:如果您可以控制http服务器配置,那么您应该始终希望将这些规则放置在主机配置中,而不是使用
.htaccess
样式的文件。这样的文件非常容易出错,使事情变得复杂,难以调试,并且会使服务器速度减慢。它们只应在两种情况下使用:如果您无法控制http服务器配置,或者如果您需要脚本对规则集进行动态更改(这通常是非常不安全的事情)

如果你想使用“正则表达式”,读一篇关于“正则表达式”的小介绍有什么不好?这些都有详细的解释。你只要看看就行了。为什么在这里问呢?我是说还记得上学的日子吗?当你因为读到一些东西而学到了一些东西时?这确实奏效了!太好了,不是吗?@arkascha这是什么评论?当然我读正则表达式。我知道一些关于它的事情,但这并不能使我成为大师。你为什么要上学?因为老师会给你展示一些东西,给你一些建议,这就是我所做的!我试过了,我失败了,我请求帮助。对不起,你抱怨我的评论太苛刻是对的。这不是一个建设性的评论。很抱歉,这样的东西不属于这里。但也请理解看到所有这些问题是多么令人沮丧,人们显然读了5行关于某件事的内容,决定“嗯,不知道”,然后把他们的问题扔在这里。相反,这个地方应该是真正的问题,人们需要帮助。你的问题在谷歌上的500万个例子中得到了回答。例如,它们都显示了
的归属。@arkascha道歉批准:-)我知道,很多人都喜欢你解释。我回答这些问题的方式就是在谷歌上搜索,添加链接,让这些人阅读。提醒他们是否尝试谷歌是我认为最好的方式。不管怎样,谢谢你的回答,如果你知道如何解决问题,你应该做出一个好的贡献:-)我认为你没有正确地阅读我的问题。我已经重写过了,想从文件名中删除.html,但在添加.html时可以访问正确的文件(因为谷歌的缓存)@eL Prova我不知道文件夹中实际存在哪些文件?如果.html文件仍然存在,而您只想使用扩展名和不使用扩展名访问它们,这是正确的吗?好的。对不起,我更改了答案。我想我们沟通有误…html文件只是一个名称。页面存储在数据库中。首先,为了表现得像真实页面一样,我创建了/.html。现在我想有/只有,但当有人访问旧样式时,它应该显示相同的页面,这是一个非常有建设性的答案!你说得不错!谢谢你!我试过了,似乎工作没有任何问题。我知道这些论点,但只使用一种风格。我想谷歌缓存链接,但如果有人有一个扩展链接,它应该得到相同的页面,而不是404或什么。一般的注意事项是值得注意的。我知道,但我想很多人都不知道。无论如何,谢谢你的回答。学到了新东西;-)在规则中.html被赋予重定向不应该发生的事情…我尝试修复它,如果你有解决方案,请告诉我!我确实明白你的意思。可能有一个更简洁的解决方案,但目前最直接的是我在上面更新的答案中发布的内容。这是两条规则否,首先是与training
.html
匹配的规则,然后是更一般的规则。因为规则是按顺序处理的,所以应该可以解决这个问题。