我試圖實現的是使用htaccess來僅允許來自同一服務器的請求,但通過使用可用變量並且不指定IP。 目標是能夠對相應文件夾中的文件運行cron作業和ajax請求,但如果嘗試直接訪問,則返回404頁面。htaccess命令只允許來自同一服務器的請求(不指定IP)
這是我到目前爲止有:
Options -MultiViews +FollowSymLinks
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !%{SERVER_ADDR}[NC]
RewriteRule ^(.*)$ /error404.html [L,R=404]
這工作得很好了阿賈克斯。它也適用於cronjobs,如果服務器碰巧使用相同的外出IP,但是如果服務器的外出IP與站點的IP不同,顯然它將失敗並返回404,因爲%{REMOTE_ADDR}
與%{SERVER_ADDR}
不同。 一個解決方案是查看該服務器的傳出IP,並將其添加爲另一個異常。不過,我正在尋找更可重用的解決方案。我試圖使用正則表達式來匹配IP的第一部分,但我沒有這樣的運氣。真的不知道如何去做這件事。基本上與正則表達式我想要實現的是: 假設:
%{REMOTE_ADDR} = 192.322.122.50
%{SERVER_ADDR} = 192.322.122.1
這些是2個變量,我需要找到一個有效的比較表達式。如果IP的第一部分相同,則此表達式將返回true。
另一種方法是指定允許的範圍,但我不知道想要的範圍是什麼。我知道這是第一部分,如果SERVER_ADDR
變量,但我不知道如何告訴服務器我的意思:D
希望我不是太混亂。最終,我正在尋找的是一種確定請求是否來自同一臺服務器的方法。它必須通過.htaccess文件來實現。爲什麼?由於受保護的文件夾還包含非PHP腳本的文件,所以替代方法是動態地爲所有這些文件提供服務,並在所有條件下使用PHP。使用普通的htaccess命令會更加優雅。我只是希望有一種方法可以做到這一點。
你可能做的最好的事情是匹配子網(像前3個字節),但不是像1-50這樣的任意範圍。 –
是匹配子網是我想要做的。我想另一種方式來說這是..你如何寫條件,所以它只允許來自同一子網的請求? 而1-50只是一個例子。以及知識產權。我試圖使代碼完全動態,所以換句話說,子網不能從字面上指定,但它必須以某種方式從SERVER_ADDR變量中提取。這是我的困境。 – Owbey