将所有链接重定向到目录
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]
此处不需要 QSA
和 NC
标志。
或者,在 Apache 2.4 上使用 END
标志:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) public/ [END]
我将所有 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]
此处不需要 QSA
和 NC
标志。
或者,在 Apache 2.4 上使用 END
标志:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) public/ [END]