我只想重写 / 而不写其他内容。含义
/ => /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