Apache Mod Rewrite: RewriteRule with L argument. What's wrong?

后端 未结 4 1466
臣服心动
臣服心动 2021-01-22 22:27

I\'m developing a php application and I have a little issue with Apache and Mod Rewrite. Anyone knows what\'s wrong here?:

RewriteEngine on
RewriteBase /mysite/
         


        
相关标签:
4条回答
  • 2021-01-22 23:06

    Centauro12, the problem is, that the [L] flag in fact stops propagation through the following rules, but then (if you are in an .htaccess file) the URL mapping starts over again. That means, all your rules will then be processed a second time. See the Apache Rewrite Guide for the details.

    Therefore you need to explicitly disable rewriting for your rewritten php scripts:

    RewriteRule ^css/css.php - [L]
    RewriteRule ^js/js.php - [L]
    

    or more compact (although perhaps not what you want):

    # don't rewrite anything that really exists
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .* - [L]
    
    0 讨论(0)
  • 2021-01-22 23:08

    I've found a solution:

    RewriteEngine on
    RewriteBase /mysite/
    
    RewriteRule ^css\/css\.css css/css.php [L]
    RewriteRule ^css\/(.*)$ css/$1 [L]
    RewriteRule ^js\/js\.js js/js.php [L]
    RewriteRule ^js\/(.*)$ js/$1 [L]
    RewriteRule ^img/(.*)$ img/$1 [L]
    RewriteRule ^(.*)$ index.php?rewrite=$1 
    

    It works fine, but I don't know why it's necessary

    RewriteRule ^css\/(.*)$ css/$1 [L]
    

    and

    RewriteRule ^js\/(.*)$ js/$1 [L]
    

    I hope it hepls anyone.

    Thanks! :)

    0 讨论(0)
  • 2021-01-22 23:08

    try

    RewriteRule ^/css/css\.css css/css.php [L]
    RewriteRule ^/js/js\.js js/js.php [L]
    RewriteRule ! /^img/.* index.php
    

    ie. if you ^-anchor the pattern to the beginning of the string, start it with a /. patterns are matched against URL-paths, which start with /.

    EDIT

    above is valid for server config, virtual host, and directory context only. if the context is .htaccess, the per-directory prefix including the first slash is stripped before the rule is matched (and prepended afterwards), so no need for ^/ here.

    0 讨论(0)
  • 2021-01-22 23:09

    You might have to set your rewrite base to "/" before starting your expression with "^css..."

    RewriteBase /
    
    0 讨论(0)
提交回复
热议问题