簡體   English   中英

mod_rewrite:圖像文件名被誤認為是重寫值

[英]mod_rewrite: Image file name being mistaken as rewrite value

在我的.htaccess文件中,我有以下重寫規則:
RewriteRule example actual-page.php [L]

只需重寫:
www.mysite.com/examplewww.mysite.com/actual-page.php

由於與規則混淆,我遇到的問題導致文件名為(my_example.png)的example圖像無法加載。

我通過將規則更改為解決了我的問題:
RewriteRule /example /actual-page.php [L]

我只想知道正確的解決方案是什么。 在mod_rewrite的世界中,我還有很多要學習的東西,我想知道是否有針對此類問題的一些已實現的修復程序,或者您是否真的應該使規則更具體。

在這一行之前添加規則:

RewriteCond %{REQUEST_FILENAME} !-f

這意味着以下規則僅在所請求的URL不是真實文件時才匹配。

您的重寫規則RewriteRule example actual-page.php [L]表示:

在當前網址中找到正則表達式example ,如果找到,則將URL替換為actual-page.php 然后終止重寫過程,並忽略其他規則(L標志)。

如果字符串“ example”出現在URL中的任何位置(包括“ example.png”,也包括“另一個示例來自另一個URL”),則此正則表達式將觸發。

因此,確保您不要在正則表達式中搜索任何地方,而是告訴它與整個url字符串或至少重要部分匹配,是一個非常好的主意。 這樣做的語法字符是“ ^”代表“字符串開頭”,“ $”代表“字符串結尾”。 這會將您的規則更改為RewriteRule ^example$ actual-page.php [L]

另一方面,這可能現在不起作用,因為url確實包含一個斜杠,不再允許該斜杠匹配。 您可以添加它: RewriteRule ^/example$ actual-page.php [L] 請注意,此匹配項從不使用查詢字符串,您無法在RewriteRule中檢測到它,但必須在其前面使用RewriteCond子句。

用於將任何虛擬url重寫到現有PHP腳本中但不接觸任何現有資源(如HTML文件,圖像等)的通用用例如下:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule .* - [L]
RewriteRule .* php-script.php [L]

這具有相反的邏輯:如果第一個規則匹配,並且所請求的文件名是文件,目錄或符號鏈接,則不會進行重寫。 如果請求真正的資源,這將取消重寫。 否則,在第二個RewriteRule中嘗試相同的URL,然后執行php-script.php,然后可以分析所請求的URL並對其執行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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