我的网站有以下文件夹结构:
index.php
.htaccess
public_html/css/* (css files)
public_html/images/* (image files)
public_html/js/* (javascript files)
子文件夹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]
答案 0 :(得分:2)
这一行
RewriteCond %{DOCUMENT_ROOT}/public_html/%{REQUEST_URI} -f
必须重写为(2种可能性)
RewriteCond %{DOCUMENT_ROOT}/public_html%{REQUEST_URI} -f
# or
RewriteCond %{DOCUMENT_ROOT}/public_html/$1 -f
此外,由于您已在/
中对其进行了定义,因此public_html
中的RewriteRule
之前不需要前导斜杠RewriteBase
。
然后,这一行
RewriteCond ${REQUEST_URI} ^/public_html/
必须重写为
RewriteCond %{REQUEST_URI} ^/public_html/
拼写错误(将$
替换为%
)。
结论
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]