将所有链接重定向到目录

Redirecting all links to directory

我将所有 link 重定向到“public”目录宽度:

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /public/ [L,QSA,NC]

但它总是给我“500 内部服务器错误”

如果我写相同的路径它会工作

RewriteEngine on
RewriteBase /

RewriteRule ^(.*)$ /public/page/

但是如果我输入动态变量 $i 它会给我 500 错误

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /public/ [L,QSA,NC]

这将导致重写循环(500 错误),除非它重写到物理文件。您需要确保只重写直接请求。您可以通过检查 REDIRECT_STATUS 环境变量来做到这一点。

例如:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) public/ [L]

此处不需要 QSANC 标志。

或者,在 Apache 2.4 上使用 END 标志:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) public/ [END]