【问题标题】:RewriteRule for static files in subfolder子文件夹中静态文件的 RewriteRule
【发布时间】:2014-09-05 13:03:02
【问题描述】:

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

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]

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    这一行

    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]
    

    【讨论】:

    • 感谢您的更正,但更改不起作用。图像、css 和 js 仍然丢失(404(未找到)消息)。
    • 您确定 mod_rewrite 已启用并且在您的客户网站上允许 htaccess 吗?
    • 我认为 .htaccess 是允许的,因为当我评论 RewriteBase / 行时,我得到一个 500 错误页面。但我不确定,是否有任何其他 apache 设置阻止了正确的重写?!
    • 可以签入apache错误日志并重写日志吗?
    猜你喜欢
    • 2020-12-16
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2021-05-28
    相关资源
    最近更新 更多