【发布时间】:2023-03-03 13:28:01
【问题描述】:
我需要将 domain.com/abcdef.html 重定向到 domain.com/abcdef 并且新 url 的内容应该是 domain.com/abcdef.html。
我真的在这里挣扎。我可以实现从显示的 html 中获取内容,而 url 中没有 html,但是两个 url 都可用。
当我尝试同时实现时,我得到了一个无限循环和一个 ERR 500,但我不知道如何防止这种无限循环。
所以我尝试了一个 - 使两个 url 具有相同的内容看起来像这样:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
RewriteRule ^([^\.]+)$ $1.html [NC,L]
第二条规则与前两行相同:
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
RewriteRule ^([^\.]+)$ $1.html [NC,L]
导致无限循环。我的研究只让我找到了解决方案,或者尝试使用 index.php。但我搜索的是仅 htaccess 的解决方案。
有可能吗?
编辑:我明白为什么会发生无限循环 我请求 blabla.html --> 规则 1 使其成为 blabla 并再次请求,规则 2 使其再次成为 blabla.html 请求,依此类推。但是我该如何预防呢?
编辑2:所以我按照starkeen的建议尝试了,结果如下:
RewriteEngine On
RewriteCond %{ENV_REDIRECT_STATUS} 200
RewriteRule ^ - [L]
RewriteBase /
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
RewriteRule ^([^\.]+)$ $1.html [NC,L]
这仍然会导致无限循环。将它与 RewriteCond 一起使用仍然可以使用(blabla.com/content.html 和 blabla.com/content)
不幸的是,它不是 apache 2.4,所以我无法尝试使用 END 标签,但我尝试联系我的主机并询问他们是否更新了它。
还是我弄错了,把 htaccess 搞混了?
编辑 3:因此,由于我的代码应该可以工作,但不能正常工作,所以这里是整个 htaccess,以确保没有其他任何东西阻止 **** 工作。
AuthName "nottellingyou"
AuthType Basic
AuthUserFile /home/www/top/secret/.htpasswd
AuthGroupFile /dev/null
require valid-user
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{ENV_REDIRECT_STATUS} 200
RewriteRule ^ - [L]
RewriteBase /
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
RewriteRule ^([^\.]+)$ $1.html [NC,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
【问题讨论】: