子文件夹中静态文件的重写规则

Geo*_*ber 1 apache .htaccess mod-rewrite

我的网站有以下文件夹结构:

index.php
.htaccess
public_html/css/* (css files)
public_html/images/* (image files)
public_html/js/* (javascript files)
Run Code Online (Sandbox Code Playgroud)

子文件夹public_html中的所有静态文件都链接到我的页面文件中,而没有public_html:例如/images/logo/logo.png

我设置了以下 .htaccess 文件,它在我的本地 apache 和我的网站空间上运行良好,但在客户的网站空间上,它不起作用:

RewriteEngine On
RewriteBase /

RewriteCond %{DOCUMENT_ROOT}/public_html/%{REQUEST_URI} -f
RewriteRule ^(.*)$ /public_html/$1 [L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond ${REQUEST_URI} ^/public_html/
RewriteRule .* - [L]
RewriteRule ^ index.php [QSA,L]
Run Code Online (Sandbox Code Playgroud)

Jus*_*man 5

这条线

RewriteCond %{DOCUMENT_ROOT}/public_html/%{REQUEST_URI} -f
Run Code Online (Sandbox Code Playgroud)

必须重写为(2 种可能性)

RewriteCond %{DOCUMENT_ROOT}/public_html%{REQUEST_URI} -f
# or
RewriteCond %{DOCUMENT_ROOT}/public_html/$1 -f
Run Code Online (Sandbox Code Playgroud)

此外,您不需要/public_htmlin之前使用前导斜杠,RewriteRule因为您已经在RewriteBase.

那么,这条线

RewriteCond ${REQUEST_URI} ^/public_html/
Run Code Online (Sandbox Code Playgroud)

必须改写为

RewriteCond %{REQUEST_URI} ^/public_html/
Run Code Online (Sandbox Code Playgroud)

错字错误(替换$%)。

结论

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_URI} ^/public_html/ [NC]
RewriteRule ^ - [L]

RewriteCond %{DOCUMENT_ROOT}/public_html/$1 -f
RewriteRule ^(.*)$ public_html/$1 [L]

RewriteRule ^ index.php [L,QSA]
Run Code Online (Sandbox Code Playgroud)