添加HTML扩展名的文件只能在一个目录扩展名、文件、目录、只能在

2023-09-02 09:53:47 作者:旧人揪心,

试图重写如下链接:

/content/about-me

...这样的:

...to this:

/content/about-me.html

这是必要的东西我工作。我不断收到内部服务器错误此htaccess的规则:

It's necessary for what I'm working on. I keep getting internal server errors with this htaccess rule:

RewriteRule ^content/(.*) /content/$1.html [NC,L]

知不知道我做错了吗?对净例子负荷,但不能完全得到它的权利。

Any idea what I'm doing wrong? Loads of examples on the net, but can't quite get it right.

推荐答案

您重写规则(模式)过于宽泛,会赶上已经重写网址。覆盖已经重写URL会导致无穷的改写循环,Apache的智能检测,并中止这样的请求,500错误。

Your rewrite rule (pattern) is too broad and will catch already rewritten URLs. Overwriting already rewritten URL will lead to infinite rewrite loop, which Apache intelligently detects and aborts such request with 500 error.

重写规则最后[L]标志不工作?

例如:

在原始请求: /你好/粉红小猫 1日(初步)改写: /hello/pink-kitten.html 第二个周期:重写 /hello/pink-kitten.html.html 在第3周期:重写 /hello/pink-kitten.html.html.html ...等 Original request: /hello/pink-kitten 1st (initial) rewrite: /hello/pink-kitten.html 2nd cycle: rewritten to /hello/pink-kitten.html.html 3rd cycle: rewritten to /hello/pink-kitten.html.html.html ... and so on

更正确的做法(的几个可能的方法之一) - 将检查是否如HTML文件存在在重写:

More correct approach (one of few possible approaches) -- will check if such html file exists BEFORE rewriting:

# add .html file extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^content/(.+)$ /content/$1.html [L]