Nginx配置:将404重写为两个可能的位置:/blog/index.php或/index.php

时间:2017-11-02 03:06:43

标签: nginx

我需要将所有404路由到parent td,除非在URL的开头有<style> table tr { border-bottom: 1px dotted #E8E8E8; } table tr td { padding-top: 6px; padding-bottom: 6px; } .image{ margin:0; padding:0; } .rowspan { position: relative; } .image-input{ margin:0; padding:0; position: absolute; top: 6px; } </style> <table> <tbody> <tr> <td>Category</td> <td><input type="text" id="CId"></td> <td>Contries </td> <td><input type="text" id="Contries"></td> </tr> <tr> <td>Name</td> <td><input type="text"></td> <td class="image">image</td> <td rowspan="2" class="rowspan"><input class="image-input" type="text"> <img src="/" /> </td> </tr> <tr> <td>Branch</td> <td><input type="text" id="Brand"></td> <td></td> <td style="display: none;"></td> </tr> <tr> <td>Product</td> <td><input type="text"></td> <td></td> <td style="display: none;"></td> </tr> </tbody> </table>,然后我需要将其路由到/index.php

换句话说,我有四个URL:

/blog/

我需要将这些文件路由到我的主网站/blog/index.php文件或我的博客example.com/ example.com/my-page/ example.com/blog/ example.com/blog/my-post/ 文件。
我知道我可以使用PHP来实现这一点,但这对于Nginx来说是一个更适合的任务。
我设法使用以下方法实现了所需的行为:

index.php

但是我想在没有index.php指令的帮助下实现这一目标 我没有运气就试过以下事情:

location / {
    try_files $uri $uri/;
}

if (!-e $request_filename)
{
    # Wordpress Blog
    rewrite ^/blog($|/.*) /blog/index.php break;
    # Main Site
    rewrite ^ /index.php?_url=$uri&$args break;
}

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass  unix:/var/run/php/php7.0-fpm.sock;
    fastcgi_index /index.php;
    include fastcgi_params;
    fastcgi_split_path_info       ^(.+\.php)(/.+)$;
    fastcgi_param PATH_INFO       $fastcgi_path_info;
    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

以上正确地为4个中的3个提供了正确但不是rewrite,这产生了Nginx 404页面。

我尝试了location /blog/ { try_files $uri $uri/ /blog/index.php; } location / { try_files $uri $uri/ /index.php?_url=$uri&$args; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_index /index.php; include fastcgi_params; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } /blog/my-post/之类的内容。前者没有产生差异,而后者产生了一个丑陋的网关错误。我宁愿避免使用location ~ /blog/解决方案,因此我没有以冗余方式嵌套配置。在这种情况下,我很快就会坚持我的location ^~ /blog/解决方案。

我的逻辑出了什么问题?

0 个答案:

没有答案