没有文件名的HTACCESS REQUEST_URI

时间:2012-03-07 15:04:48

标签: php .htaccess url-rewriting

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?

我已经尝试过从request_uri中删除文件名并改变我的正则表达式,但无济于事。

我要做的是确保某些文件类型由PHP脚本处理,并且无法直接访问。

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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。] * $位将匹配普通文件名。我不明白的是,没有[R]的http://%{SERVER_NAME}/...重定向只是一个正常的内部重写,为什么你不做呢

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]

如果你想让它更容易理解。