2012-03-07 51 views
0
RewriteEngine On 
RewriteCond %{REQUEST_URI} !(images) 
RewriteRule ^(.*)\.(txt|rtf|docx?|odt|pdf|bmp|gif|jpe?g|png|tiff?)$ http://%{SERVER_NAME}/~abc123/uploader/process.php [nc] 

有沒有引述~abc123/uploader但如此,如果沒有文件名REQUEST_URI通過動態傳遞修改我的正則表達式的方法嗎?.htaccess的REQUEST_URI不帶文件

我試過尋找刪除request_uri的文件名,也改變了我的正則表達式,但無濟於事。

我想要做的是確保某些文件類型由PHP腳本處理,不能直接訪問。

回答

0

這裏有兩條線索,可以幫助你:

首先,你可以使用這些關鍵字到你的正則表達式(我讓你谷歌獲取更多信息):%{SCRIPT_FILENAME}%{REQUEST_URI}

其次,這裏有一個例子如何使用它:

# (1) if domain name is static: 
RewriteCond %{HTTP_HOST} ^(.*)\.s\.(.*) [NC,OR] 
RewriteCond %{HTTP_HOST} ^(.*)\.static\.(.*) [NC] 
# (2) and it's not the JavaScript directory: 
RewriteCond %{REQUEST_URI} !^/js/(.*)$ 
# (3) *always* add /templates/ (if not there): 
RewriteRule /(templates/)*(.*) /templates/$2 [L] 

而且有幾個人知道,你甚至可以改變整個目標文件名這種方式(注:STATICPATH_LOCAL瓦里能是我以前計算幾步環境變量):

# If static... 
RewriteCond %{ENV:STATIC} 1 
# ...first test to see if the file exists in the language path: 
RewriteCond %{DOCUMENT_ROOT}/%{ENV:PATH_LOCAL}/%{ENV:EXT}%{REQUEST_FILENAME} -f 
# It exists => rewrite filename then end: 
RewriteRule ^(.+) %{DOCUMENT_ROOT}/%{ENV:PATH_LOCAL}/%{ENV:EXT}%{REQUEST_FILENAME} [QSA,L] 
+0

感謝您的線索,但我仍然無所適從。 我不想引用和替換另一個字符串,就像在您的模板示例中您引用字符串'模板'的規則中那樣。 我只是想剝離request_filename並將其附加到'process.php',作爲我規則的最後部分。 – u01jmg3 2012-03-07 17:21:41

0
RewriteEngine On 
RewriteBase /
RewriteCond %{REQUEST_URI}  ^(?!images)(.*)/[-\w\.]*$ 
RewriteRule ^(.*)\.(txt|rtf|docx?|odt|pdf|bmp|gif|jpe?g|png|tiff?)$ http://%{SERVER_NAME}/%1/process.php [NC,L] 

會做什麼你問。 (?!...)是一個負向預測,即不包含圖像。 [ - \ w。] * $位將與正常的文件名匹配。我不明白的是,http://%{SERVER_NAME}/...重定向沒有[R]僅僅是一個正常的內部重寫你爲什麼不只是做

RewriteRule ^(?!images)(.*)/[-\w]*\.(?:txt|rtf|docx?|odt|pdf|bmp|gif|jpe?g|png|tiff?)$ $1/process.php [NC,L] 

沒有任何conds或

RewriteCond %{REQUEST_URI} !^images 
RewriteCond %{REQUEST_URI} (txt|rtf|docx?|odt|pdf|bmp|gif|jpe?g|png|tiff?)$ 
RewriteRule ^(.*)/.*  $1/process.php [NC,L] 
如果你想

讓它更容易理解。

相關問題