在 [L] 不起作用的 RewriteRule 中循环

Loop in RewriteRule with [L] not working

我知道这已经涵盖了,但我就是找不到我的问题的答案。

多年来我一直有这个页面:www.mysite.com/page.php 但我决定把它变成一个漂亮的 url:www.mysite。 com/page/

我用的是:

RewriteRule ^page/?$ page.php [L]

没问题,但现在我也想要反过来,所以如果有人输入 page.php,它会显示 /page/,但我只是得到一个循环:

RewriteCond %{REQUEST_URI} !^/page/
RewriteRule ^page.php$ /page/ [R=301,L]

我不明白为什么。 [L] 似乎不起作用,但是使用 [end] 标志我得到了 500.

这不是正确的做法。您可以使用:

RewriteEngine On
RewriteBase /

# external redirect from /page.php to /page
RewriteCond %{THE_REQUEST} \s/+(page)\.php[?\s] [NC]
RewriteRule ^ %1 [R=302,L]

# internal forward from /page to /page.php
RewriteRule ^(page)/?$ .php [L,NC]