[英]Apache Mod Rewrite: RewriteRule with L argument. What's wrong?
我正在開發一個php應用程序,而Apache和Mod Rewrite有一個小問題。 有人知道這是怎么回事嗎?:
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不會停止重寫過程?
'last | L'(最后一條規則)
在此處停止重寫過程,並且不再應用其他重寫規則。 這對應於C語言中的Perl last命令或break命令。 使用此標志可防止遵循以下規則進一步重寫當前重寫的URL。 例如,使用它將根路徑URL('/')重寫為真實的URL,例如'/ e / www /'。
自3個小時以來,我已經閱讀了論壇和文檔,但我仍然遇到同樣的問題。
提前致謝。
問題是Centauro12,實際上[L]標志已停止通過以下規則傳播, 但是 (如果您位於.htaccess文件中)URL映射將重新開始 。 也就是說,您的所有規則都將再次處理。 有關詳細信息,請參見Apache Rewrite Guide 。
因此,您需要顯式禁用重寫的php腳本的重寫:
RewriteRule ^css/css.php - [L]
RewriteRule ^js/js.php - [L]
或更緊湊(盡管可能不是您想要的):
# don't rewrite anything that really exists
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
我找到了一個解決方案:
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
它工作正常,但我不知道為什么有必要
RewriteRule ^css\/(.*)$ css/$1 [L]
和
RewriteRule ^js\/(.*)$ js/$1 [L]
我希望它能幫助任何人。
謝謝! :)
在使用“ ^ css ...”開始表達式之前,可能必須將重寫基數設置為“ /”。
RewriteBase /
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.