htaccess斜杠加载资源

时间:2014-05-10 10:51:20

标签: php .htaccess resources rewriting

<IfModule mod_rewrite.c>
    # Enable rewrite engine
    RewriteEngine On

    #Removes access to the system folder by users.
    RewriteCond %{REQUEST_URI} ^app.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    # Some extra conditions
    # skip these paths for redirection
    RewriteRule ^img/(.*) public/assets/img/$1 [L]
    RewriteRule ^css/(.*) public/assets/css/$1 [L]
    RewriteRule ^js/(.*) public/assets/js/$1 [L]
    RewriteRule ^plugins/(.*) public/assets/plugins/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_URI} !^.*\.(jpg|css|js|gif|png)$ [NC]

    RewriteRule ^(.*)$ public/index.php?url=/$1 [QSA,L]

</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.

    ErrorDocument 404 /index.php
</IfModule> 

这种重写是有效的,除了当我加载像这个localhost/login/(尾随斜杠)的URL时,它没有加载资源。当我使用localhost/login时,它会加载所有图像和CSS文件。有人可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

这可能是因为您在HTML中使用相对路径。在URL的末尾有一个额外的斜杠,就客户端URL而言,你实际上在另一个子文件夹中。

要解决此问题,请在客户端代码中使用root-relative(以斜杠开头)或绝对URL。例如:

/img/picture.jpg

或者,如果您无法修改网址,请在base部分中添加head元素,以指示浏览器相对于哪些相对网址。例如,要使它们相对于文档根目录:

<base href="/">

或者,通过重定向到.htaccess中的非斜杠网址或在index.php中处理此事件来防止尾随斜杠返回有效文档。