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脚本处理,并且无法直接访问。
答案 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]
有些人知道您甚至可以通过这种方式更改整个目标文件名(注意:STATIC
和PATH_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]
如果你想让它更容易理解。