如何使用.htaccess保护uploads文件夹,只允许wordpress网站中的图像

时间:2015-05-25 15:10:02

标签: php wordpress .htaccess

我有一个问题,我需要保护网站免于上传和/或执行除图像以外的任何脚本或文件。

但我尝试使用.htaccess文件进行少量修改,但没有成功。

wordpress有wp-content / uploads文件夹,用于存储上传内容。在内部,它根据文件夹中的年/月组合进行排序。我在wordpress网站上使用了这个例子,但它以某种方式锁定整个文件夹,我甚至看不到图像。

public class CodeEditView extends LinearLayout implements TouchEditText.TouchEditTextListener{

    private View root;
    private InternalFile file;
    private TouchEditText code;
    private ScrollView scroll;
    private int linesCount;
    private TextView lines;
    private int currentStartLine;
    private int currentEndLine;


    public CodeEditView(Context context) {
        super(context);
        init(null, context);
    }

    public CodeEditView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(attrs, context);
    }


    private void init(AttributeSet attrs, Context context) {

        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        root = layoutInflater.inflate(R.layout.edit_code_layout, this).findViewById(R.id.scroll_view);

        this.lines = (TextView) findViewById(R.id.edit_code_lines_view);
        this.code = (TouchEditText) findViewById(R.id.edit_code_content_view);
        code.setRoot(root);
        code.setListener(this);
        linesCount = 0;
        scroll = (ScrollView) findViewById(R.id.scroll_view);
        scroll.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {

            @Override
            public void onScrollChanged() {
//                int scrollY = scroll.getScrollY();
//                if(scrollY != 0) {
//                    code.scrollEvent();
//                    if(currentStartLine < code.getCurrentStartLine()) {
//
//                        String c = lines.getText().toString();
//                        String cc = c.replaceFirst("\\d+", " ");
//                        cc += Integer.toString(code.getCurrentEndLine()+10) + System.lineSeparator();
//                        lines.setText(cc);
//                        currentStartLine = code.getCurrentStartLine();
//
//                    } else {
////                        CharSequence c = lines.getText();
////                        lines.setText(lines.getText().);
//                    }
//                }
                int scrollY = scroll.getScrollY();
                if(scrollY != 0) {
                    code.scrollEvent();
                }


            }
        });

    }

    public void setFile(InternalFile file) {
        this.file = file;
    }

    public void setLexer(Lexer lexer) {
        code.setLexer(lexer);
    }

    private void initLines() {
//        currentStartLine = code.getCurrentStartLine();
//        currentEndLine = code.getCurrentEndLine();
//        int usedLines = code.getLineCount();
//        if(usedLines != linesCount) {
//
//            String text = "";
//
//            for(int i = currentStartLine; i <= currentEndLine+10; i++) {
//                text += Integer.toString(i) + System.lineSeparator();
//            }
//            lines.setText(text);
//            linesCount = usedLines;
//        }
        int usedLines = code.getLineCount();
        String text = "";
        for(int i = 1; i <= usedLines; i++) {
            text += Integer.toString(i) + System.lineSeparator();
        }
        Log.d("TEXT", Integer.toString(usedLines));
        lines.setText(text);
        linesCount = usedLines;




    }

    public void initText(String content) {
        code.initText(content);

        code.post(new Runnable() {
            @Override
            public void run() {
                initLines();
            }
        });

    }


    public void setFont(Typeface typeFace) {
        this.lines.setTypeface(typeFace);
        this.code.setTypeface(typeFace);
    }

    @Override
    public void onTyped(String text) {
        EventBus.getDefault().post(new UpdateCacheFileEvent(text,file));
        setLines();
    }

    public void forceSyntax(Syntax s) {
        code.forceSyntax(s);
    }

    private void setLines() {
        int usedLines = code.getLineCount();
        if(usedLines > linesCount) {

            lines.append(Integer.toString(usedLines) + System.lineSeparator());
            linesCount = usedLines;
        } else {
        }


    }
}

因此,有一种工作方式可以在wp-content / upload文件夹中上传和排序图像,然后再访问它们。我认为问题是有子文件夹sinside上传或我错了吗?

1 个答案:

答案 0 :(得分:2)

因此,htaccess解决方案不会影响他们可以上传的内容,但会递归地影响所有子目录的访问。

RewriteEngine on
#if the file does not have one of theses extensions
RewriteCond %{REQUEST_URI} !\.(png|jpg|jpeg|gif)$
#then it should be marked as forbidden.
RewriteRule .*$ - [F]

应该这样做。