【问题标题】:Redirecting all links to directory将所有链接重定向到目录
【发布时间】:2022-01-24 19:52:42
【问题描述】:
我将所有链接重定向到“公共”目录宽度:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /public/$1 [L,QSA,NC]
但它总是给我“500 内部服务器错误”
如果我写了一致的路径,它会工作
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)$ /public/page/
但是如果我把动态变量 $i 它给我 500 错误
【问题讨论】:
标签:
apache
.htaccess
redirect
mod-rewrite
server
【解决方案1】:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /public/$1 [L,QSA,NC]
这将导致重写循环(500 错误),除非它重写到物理文件。您需要确保只重写直接请求。您可以通过检查 REDIRECT_STATUS env var 来做到这一点。
例如:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) public/$1 [L]
这里不需要QSA 和NC 标志。
或者,在 Apache 2.4 上使用 END 标志:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) public/$1 [END]