了解.htaccess文件

时间:2016-05-01 15:28:30

标签: php apache .htaccess

我正在寻求帮助,了解特定.htaccess文件的工作原理。

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
        chrome.pageAction.show(tabId);

});


chrome.pageAction.onClicked.addListener(function () {

    chrome.identity.getAuthToken(

        {'interactive': true},

        function(token) {

            //I get access token successfully.
            console.log(token);

            var scriptID = "MR4ao03vpkqX-hTekNkflNDxdZGPvncRS";

            var apiURL = "https://script.googleapis.com/v1/scripts/" + scriptID + ":run";

            var requestBody = {
                "function": "myFunction",
                "devMode": true
            };

            var xhr = new XMLHttpRequest();
            xhr.open('POST', apiURL, true);

            xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
            xhr.setRequestHeader('Authorization', 'Bearer ' + token);

            xhr.send(JSON.stringify(requestBody));


        });

});

到目前为止,我认为这是我所理解的:

第1行:允许Apache根据某些规则更改网址?

第2,3行:关于不访问文件和目录的事情。但是我的浏览器访问RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 没有问题,所以我认为我没有正确理解。

第4行:我知道http://localhost/dev/can_i/yes_i_can.php是一个正则表达式,说“以任何东西开头和结尾”,但这究竟是指什么?整个网址?然后它被index.php替换为附加的表达式。那么为什么我们不能得到像^(.*)$这样的东西呢? 最后[L,QSA]做了什么?我知道QSA的意思是“查询字符串追加”但不确定它是如何工作的。

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:5)

这样可以启用apache mod_rewrite

RewriteEngine on

这两行意味着如果浏览器中具有指定名称的文件不存在,或者浏览器中的目录不存在,则继续执行下面的重写规则

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond基本上意味着"只有当这是真的时才执行下一个RewriteRule"。 !-l路径是请求不是链接的条件(!表示不是,-l表示链接)

RewriteRule基本上意味着如果请求完成匹配^(.+)$(匹配除服务器根目录之外的任何URL),它将被重写为index.php?url = $ 1,这意味着要重写ollewill的请求as index.php?url = olle。

QSA表示如果有一个查询字符串与原始URL一起传递,它将被附加到重写(olle?p = 1将被重写为index.php?url=olle&p=1

L表示如果规则匹配,则不再处理此规则以下的RewriteRules。

有关此内容的更完整信息,请点击上面的链接。重写支持可能有点难以理解,但是有很多关于stackoverflow的例子可供学习。