![](/img/trans.png)
[英]Apache Mod_Rewrite: include dynamic rewrites with date based variable
[英]mod_rewrite: Prevent multiple rewrites using an environment variable
我目前正在為* .php返回404錯誤,並使用以下命令將所有請求內部重定向到一個PHP文件(如果存在):
RewriteCond %{REQUEST_URI} /(?!index$)
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ /$1.php [QSA,L,E=norewrite:1]
RewriteCond %{ENV:norewrite} !1
RewriteCond %{REQUEST_URI} \.php$
RewriteRule ^(.+)$ - [R=404]
這很好。 但是,我希望能夠從index.php.src之類的文件提供PHP(或其他)源(具有適當的擴展名),同時讓index.php.src如果直接訪問也返回404。
RewriteCond %{REQUEST_URI} /(?!index$)
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ /$1.php [QSA,L,E=norewrite:1]
RewriteCond %{ENV:norewrite} !1
RewriteCond %{REQUEST_FILENAME}\.src -f
RewriteRule ^(.+)$ /$1.src [L,E=norewrite:1]
RewriteCond %{ENV:norewrite} !1
RewriteCond %{REQUEST_URI} \.php$ [OR]
RewriteCond %{REQUEST_URI} \.src$
RewriteRule ^(.+)$ - [R=404]
這似乎不起作用。 它在內部重定向到index.php,然后重定向到index.php.src,然后是404s。
有趣的是,在第一個示例中,環境變量DOES阻止了第二個規則集的執行,並且頁面按預期加載。 當我添加第二個示例中的中間規則集時,環境變量似乎不再起作用。 如果我從第二個示例中刪除了第二個規則集,而將其他行保留在最后一個規則集中,則它的行為就與第一個示例一樣(除非請求例如index.php.src返回404,這就是我想要的) 。
由於各種原因,為此目的而使用查詢字符串是不可接受的,它必須是環境變量。
我該如何進行這項工作? 我究竟做錯了什么?
編輯:以防我解釋得不好(我很確定我做到了)...
問題似乎出在第二節,但我無法弄清楚出了什么問題...
這是我所做的工作:
RewriteCond %{IS_SUBREQ} false
RewriteCond %{REQUEST_URI} /(?!index$)
RewriteCond %{ENV:REDIRECT_STOP} !1
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ /$1.php [QSA,L,E=STOP:1]
RewriteCond %{IS_SUBREQ} false
RewriteCond %{ENV:REDIRECT_STOP} !1
RewriteCond %{REQUEST_FILENAME}\.src -f
RewriteRule ^(.+)$ /$1.src [L,E=STOP:1]
RewriteCond %{IS_SUBREQ} false
RewriteCond %{ENV:REDIRECT_STOP} !1
RewriteCond %{REQUEST_URI} \.php$ [OR]
RewriteCond %{REQUEST_URI} \.src$
RewriteRule ^(.+)$ - [R=404]
您會注意到我添加了%{IS_SUBREQ}位,這有助於解決導致它返回404的首頁重新分配問題。那時,查詢字符串方法變得可以接受,並且確實可以使用該方法,但是'不是那種jsut的類型,我知道這是可以做到的,而我會做的(我做到了!)
除了將變量名從'norewrite'更改為'STOP'(為清楚起見)外,我還了解到在發生內部重定向時,由mod_rewrite設置的環境變量以'REDIRECT_'為前綴。 這就是為什么設置'norewrite'('STOP')的值,然后檢查相同的變量不起作用的原因。 當我在檢查行中將“ REDIRECT_”附加到它之后,它現在的行為與預期的一樣。
這正是我想要的! 希望這也會對其他人有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.