我想更加詳細地瞭解下面的htaccess的規則:是否可以通過PHP訪問REQUEST_FILENAME?
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
RewriteRule (.+) index.php?p=$1 [QSA,L]
</IfModule>
具體來說,我想了解REQUEST_FILENAME是如何工作的。我發現有幾個資源討論這個問題,從mod_rewrite文檔到堆棧溢出的答案。但是,似乎沒有人正在處理我正在尋找的內容,我該如何仔細查看REQUEST_FILENAME變量才能看到它的值?
通常,當我想看看在.htaccess中引用的變量之中,我將使用的print_r看$ _ SERVER全球,看看有什麼事情服務器這些值是:
echo "<pre>";
print_r($_SERVER);
echo "</pre>";
die('fin');
,可以幫我看看上面的$ _SERVER ['REQUEST_URI']這樣的值。但似乎REQUEST_FILENAME在當前環境中的任何PHP $ GLOBALS中都不可用。我確實看到了SCRIPT_FILENAME的值,並且有幾個消息來源表示這兩個值是相等的,但不清楚它們是否是替代值,或者如果REQUEST_FILENAME回退到SCRIPT_FILENAME(如果第一個不存在)。
我已經能夠輸出通過在URL中略微更新htaccess的規則輸出值,將最後一行的REQUEST_FILENAME值:
RewriteRule (.+) index.php?p=%{REQUEST_FILENAME} [R=302,QSA,L]
但是爲什麼在任何地方沒有這個值可用PHP?有什麼我可以忽略,可以幫助我理解這個變量的存儲位置以及如何通過PHP查看它的值?
謝謝馬克。我認爲我接近這個問題有點不同,但這個答案也有幫助。我發現PHP設置的討論很有幫助。 – 2013-04-11 01:41:34
+1重新打開。報告的重複內容是關於'REQUEST_URI'的,而這個問題解決了'REQUEST_FILENAME',這是一個完全不同的野獸。 – 2013-04-11 10:14:56
對於它的價值,我最初的搜索是專門關於REQUEST_FILENAME的,它的行爲對於有設計背景的人來說並不明顯。雖然有更多經驗豐富的Apache或Web服務器的人可能能夠在這兩個問題之間建立聯繫,但對我來說並不明顯,而Olaf的答案實際上是幫助我從我接近它的方向理解它的那個人。 – 2013-04-11 16:27:00