第一个问题。因此,我在Apache上有一个简单的网站" weblot.com":
website.com
index.html
site1.html
site2.html
在每个html中,我都有指向其他链接,以此形式:
<a href="index.html">main</a>
<a href="site1.html">site1</a>
<a href="site2.html">site2</a>
我希望浏览器显示" weblot.com/site1"而不是" weblity.com/site.com/site1.html"。
我已经玩了几天了,我总是得到其中一个结果:
- 重定向的无限环路。
- 内部服务器错误。
- 两个版本都可以使用(例如" weblot.com/site.html"one_answers" weblity.com/site1"),但.html留在地址栏中。
我不知道发生了什么。我什至无法正确打破它。例如,我希望此.htaccess会在访问" weblot.com/site1"时会出现错误,因为没有规则将site1重定向到site1.html:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*).html$ /$1 [R=302,QSA]
但是没有 - 它可以工作,只是在地址栏中没有删除.html。
Apache如何知道将" weblity.com/site1"重定向到" weblot.com/site1.html",而没有适当的重写?我的理解是错误的,我必须从weblity.com/site1重定向到weblity.com/site.com/site1.html才能使它起作用?
预先感谢。
您规则的最后一行:
RewriteRule ^(.*).html$ /$1 [R=302,QSA]
这意味着仅将任何file.html
更改为file
,您需要的是ACCPET file
仅内部将其重定向到file.html
:
RewriteRule ^(.*)$ /$1.html [L,QSA]
但是,在这种情况下,file.html
将是如此,如果您要删除.html
,请尝试使用效果规则:
RewriteEngine on
RewriteCond %{THE_REQUEST} s/+(.*).html[s?/] [NC]
RewriteRule ^ /%1 [R=301,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ /$1.html [L]
RewriteEngine on
之后的前两行将删除.html
。
其余的行将检查使用扩展的请求是 .html
文件,如果是 .html
,它将被重定向但内部。
现在,site1.html
或site1
都将在浏览器中为site1
。
通过此,您将确保在重定向之前的文件ACCEPET .html
扩展,这将与错误文件混合在一起。