Apache Mod 重写:带有 L 参数的 RewriteRule.怎么了?

2022-01-04 00:00:00 php mod-rewrite rewrite

我正在开发一个 php 应用程序,我在使用 Apache 和 Mod Rewrite 时遇到了一个小问题.有人知道这里出了什么问题吗?:

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/
RewriteRule ^css/css.css css/css.php [L]
RewriteRule ^js/js.js js/js.php [L]
RewriteRule !^img/.* index.php

当我把 http://localhost/css/css.css 出现在 index.php,也许我错过了一些东西......为什么当url匹配第一条规则时apache不停止重写过程?

When I put http://localhost/css/css.css appears index.php, maybe I'm missing something... Why when the url matchs with the first rule apache doesn't stop the rewriting process?

'last|L'(最后一条规则)

'last|L' (last rule)

在这里停止重写过程并不要再应用任何重写规则.这对应于 Perl 最后命令或来自C语言.使用这个标志来防止当前重写的 URL 来自按照以下规则进一步重写.例如,使用它来重写根路径 URL ('/') 到一个真实的,例如,/e/www/".

Stop the rewriting process here and don't apply any more rewriting rules. This corresponds to the Perl last command or the break command from the C language. Use this flag to prevent the currently rewritten URL from being rewritten further by following rules. For example, use it to rewrite the root-path URL ('/') to a real one, e.g., '/e/www/'.

我已经阅读了 3 个小时以来的论坛和文档,但我仍然遇到同样的问题.

I have readed forums and docs since 3 hours and I still have the same problem.

提前致谢.

推荐答案

我找到了解决方案:

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]

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

希望对大家有所帮助.

谢谢!:)

相关文章