簡體   English   中英

Apache Mod Rewrite:帶有L參數的RewriteRule。 怎么了?

[英]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]

嘗試

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

即。 如果你^ -錨定的模式字符串的開頭,以啟動/ 模式與以/開頭的URL路徑匹配。

編輯

上面的內容僅對服務器配置,虛擬主機和目錄上下文有效 如果上下文是.htaccess,則在匹配規則之前(並在后面加上前綴)會刪除每個目錄的前綴(包括第一個斜杠),因此這里不需要^/

我找到了一個解決方案:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM