php - 添加从 $ 到 $.php 的重写后 nginx CSS 中断

标签 php nginx url-rewriting

如果我将以下行添加到我的 nginx 配置中,它将破坏我的网站并且将在没有 CSS 的情况下运行:

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|svg|xml)$ {
  access_log        off;
  expires           30d;
}

location / {
    try_files $uri $uri/ $uri.php =404;
    rewrite ^/(.+)$ /$1.php last;
}

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

如果我评论重写条件,一切都会正常进行。

我该怎么做才能使重写条件和 css 样式表都起作用?

编辑:我遇到了一个新问题,现在所有像 test.php 这样的文件都可以在不写 .php 的情况下正常工作,但是像 users/ 这样的文件夹> 不起作用,我仍然收到 找不到文件,通常它应该从文件夹中获取 index.phpindex.html,我怎样才能提供这两种功能?将 .php 添加到文件并使用文件夹中的 inde.php/html

最佳答案

您可以通过将 location/ block 替换为以下两个位置 block 来分离 try_files 和重写:

location / {
    try_files $uri $uri/ @rewriterules;
}

location @rewriterules { 
    rewrite ^/(.+)$ /$1.php last;
}

这样 try_files 先执行,如果没有找到文件,则进行重写并将 .php 添加到请求中,然后由 .php 位置 block 执行,该 block 应该不需要修改。

关于php - 添加从 $ 到 $.php 的重写后 nginx CSS 中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36970765/

相关文章:

ubuntu - 在 Ubuntu 上使用 Nginx 服务多个站点

php - Docker:无法在 Windows 10 上获取 nginx 的配置文件

java - 如何让 UrlRewrite 更改我的地址?

java - URL 重写如何工作?

php - 在新服务器上部署 Symfony3 时遇到问题

PHP 从选择中返回 id

php - 在 Laravel 4 中转义原始 SQL 查询

javascript - 如何在 WordPress 中添加外部 javascript

ruby - 在 nginx 和 thin 下部署 Sinatra 应用程序的最快技巧(当然是 linux)

php - 如何将 URL 中的空格替换为连字符