仅重写 / 而不使用任何其他文件

仅重写 / 而不使用任何其他文件

我只想重写 / 而不写其他内容。含义

/ => /fp/

但是我仍然希望能够直接访问所有其他文件。

/login.php => still loads
/join.php => still loads
/index.php => still loads
etc.

我尝试了几种不同的方法,但似乎当它工作时,它会转发 / 中的所有文件,而不是仅在调用它时转发 /

我尝试过类似的事情:

rewrite ^ /fp/ break;
rewrite ^/ /fp/ break;

我尝试过很多方法,但我还是无法理清思路。

我该怎么做呢?

目前我的配置如下:

location / {
    proxy_pass      http://192.227.210.138:8080;
    location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|ttf|otf|webp|woff|txt|csv|rtf|doc|docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot|eps|ps|zip|tar|tgz|gz|rar|bz2|7z|aac|m4a|mp3|mp4|ogg|wav|wma|3gp|avi|flv|m4v|mkv|mov|mpeg|mpg|wmv|exe|iso|dmg|swf)$ {
        root           /home/account_name/web/domain.tld/public_html;
        access_log     /var/log/apache2/domains/domain.tld.log combined;
        access_log     /var/log/apache2/domains/domain.tld.bytes bytes;
        expires        max;
        try_files      $uri @fallback;
    }
    rewrite ^ /fp/ break;
}

答案1

您需要使用精确匹配,=。我不知道如何使用重写,所以我会这样做

location = / {
  alias /fp/;
}

这可能不完全正确,但它应该让你更接近。

您可能能够将 = 符号与重写一起使用。不确定。

答案2

我花了很长时间才弄清楚如何做到这一点。我在网上找不到任何解决方案。

我想向任何尝试或阅读此文的人强调,我完全阅读了有关为什么要避免使用 if 语句以及何时可以接受它们的文档。在这个解决方案中,我相信它们不仅是可以接受的,而且是实现预期结果的唯一方法。

解决方案是对 uri 进行 if 测试,看它是否为“/”,如果是,则执行重写。

location / {
    if ($uri = '/'){
        rewrite / /fp/ break;
    }
    proxy_pass      http://192.227.210.138:8080;
    location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|ttf|otf|webp|woff|txt|csv|rtf|doc|docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot|eps|ps|zip|tar|tgz|gz|rar|bz2|7z|aac|m4a|mp3|mp4|ogg|wav|wma|3gp|avi|flv|m4v|mkv|mov|mpeg|mpg|wmv|exe|iso|dmg|swf)$ {
        root           /home/account_name/web/domain.tld/public_html;
        access_log     /var/log/apache2/domains/domain.tld.log combined;
        access_log     /var/log/apache2/domains/domain.tld.bytes bytes;
        expires        max;
        try_files      $uri @fallback;
    }
}

通常应该使用try_files而不是,if但是从我的所有测试来看,我无法弄清楚如何正确编写 try_files 语句,该语句仅返回“/”而不是“/index.php”和其他此类文件。

从我下面包含的网址可以看出,这完全符合我的问题要求

http://adsactlyhits.com/ - this will return one page

http://adsactlyhits.com/index.php - this will return a different page

http://adsactlyhits.com/join.php - this page also still works

相关内容