AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 643346
Accepted
Neel
Neel
Asked: 2014-11-11 11:49:31 +0800 CST2014-11-11 11:49:31 +0800 CST 2014-11-11 11:49:31 +0800 CST

Joomla URL 重写在 Nginx 中自动工作

  • 772

这让我发疯,我不明白这是如何自动工作的。我有 nginx 作为我的网络服务器,我已经安装了具有 URL 重写的 Joomla,它index.php从 URL 中删除了。以前,当我使用 Apache 时,我必须启用 .htaccessRewriteEngine On才能使其正常工作。但是对于 Nginx,当我启用“使用 URL 重写”时,它会自动工作。我只使用将 php 文件传递​​给 php-fpm 的 Nginx。就这样。除了 Joomla 文档中给出的内容之外,我没有添加任何特殊的重写规则。我不明白“使用 URL 重写”是如何在我启用它时自动工作的,因为 Nginx 没有 .htaccess。

关于这个主题的Joomla 文档也没有帮助。在第二步它说

启用使用 Apache mod_rewrite/URL 重写选项并保存:此选项使用 Apache mod_rewrite 函数来消除 URL 的“index.php”部分。

......

如果此选项导致错误,请参阅如何检查您的服务器上是否启用了 mod rewrite。如果它未启用并且您可以访问文件 apache/conf/httpd.conf,请打开该文件并检查 LoadModule rewrite_module modules/mod_rewrite.so 行是否未注释。如有必要,取消注释该行并重新启动 Apache Web 服务器。

不知道为什么在 Nginx 配置中添加它,因为 Nginx 中没有 mod_rewrite。Joomla 后端的 URL 重写是这样说的:

使用 URL 重写 选择使用服务器的重写引擎来捕获满足特定条件的 URL 并按照指示重写它们。适用于 IIS 7 和 Apache。仅限 Apache 用户!激活前将 htaccess.txt 重命名为 .htaccess。将 web.config.txt 重命名为 web.config 并在激活前安装 IIS URL Rewrite Module。

它没有说明 Nginx,但它仍然有效。我在这里挠头。有人可以告诉我 Joomla 的 index.php 是如何在 Nginx 中如此轻松地删除的吗?这是我的 Nginx Vhost 配置:

server {

        listen 80;
        server_name example.com;
        root /var/www/example/public_html;
        index  index.php index.html index.htm default.html default.htm;

        access_log /var/log/nginx/accn_access.log;
        error_log /var/log/nginx/accn_error.log;

        ##
        # JOOMLA SEF
        ##

        location / {
              try_files   $uri $uri/ /index.php?q=$request_uri;
        }

        ##
        # PHP scripts to FastCGI 
        ##
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;

            fastcgi_pass   unix:/var/run/php5-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;

        }

}

看..它是一个非常简单的配置。魔法发生在哪里?

nginx
  • 1 1 个回答
  • 5400 Views

1 个回答

  • Voted
  1. Best Answer
    Tero Kilkanen
    2014-11-11T12:16:40+08:002014-11-11T12:16:40+08:00

    魔法发生在这里:

    try_files $uri $uri/ /index.php?q=$request_uri;
    

    这意味着 nginx 首先检查文件系统上是否存在请求的文件或目录。如果文件不存在,它会将请求传递给 Joomla,并将原始 URI 传递给q参数。

    • 2

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve