Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[求助] Apache 2.4.34 php-fpm模式 discuz x3.4伪静态怎么设置

[复制链接]
弈飞5566 发表于 2018-8-8 13:24:55 | 显示全部楼层 |阅读模式
环境:系统:centos 7.5 x64
apache httpd 2.4.34
mysql 5.7.23
php 7.2.8

问题:
Apache 使用php的php-fpm模式,discuz x3.4 不开启伪静态情况下访问页面一切正常。

开启伪静态后,在httpd.conf中也添加了以下代码,但只有首页访问正常,其它页面都显示php代码,php没有解析。请问各位大神需要怎么设置?

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^(.*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2&%1
    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^(.*)/article-([0-9]+)-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2&page=$3&%1
    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^(.*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3&%1
    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page\%3D$4&page=$3&%1
    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^(.*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3&%1
    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^(.*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3&%1
    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^(.*)/blog-([0-9]+)-([0-9]+)\.html$ $1/home.php?mod=space&uid=$2&do=blog&id=$3&%1
    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^(.*)/(fid|tid)-([0-9]+)\.html$ $1/archiver/index.php?action=$2&value=$3&%1
</IfModule>

Failure 发表于 2018-8-8 14:06:27 | 显示全部楼层
apache 开启.htaccess 根目录下方.htaccess就可以了
开启方法
httpd.conf

  1. Options FollowSymLinks
  2. AllowOverride None
复制代码

改成
  1. Options FollowSymLinks
  2. AllowOverride All
复制代码

找到
  1. LoadModule rewrite_module modules/mod_rewrite.so
复制代码

将前面的注释去掉就行了
回复

使用道具 举报

 楼主| 弈飞5566 发表于 2018-8-8 18:01:06 | 显示全部楼层
Failure 发表于 2018-8-8 14:06
apache 开启.htaccess 根目录下方.htaccess就可以了
开启方法
httpd.conf

此方法早试过了,现在问题估计不是伪静态设置成功与否的问题,
而是设置伪静态后、伪静态页面直接显示源代码的问题。
回复

使用道具 举报

Failure 发表于 2018-8-8 19:37:57 | 显示全部楼层
弈飞5566 发表于 2018-8-8 18:01
此方法早试过了,现在问题估计不是伪静态设置成功与否的问题,
而是设置伪静态后、伪静态页面直接显示源 ...

直接显示源码的话 就是环境的问题
回复

使用道具 举报

crx349 发表于 2018-8-9 12:33:20 | 显示全部楼层
回复

使用道具 举报

LJCJR 发表于 2018-8-9 13:03:05 | 显示全部楼层
需要在网站根目录创建.htaccsss,然后再后台的伪静态规则里找到适合自己网站环境的哪一项,然后把下面的内容拷贝到.htaccess即可
如果LZ认为比较麻烦,可以参照:https://addon.dismall.com/?@study_kz_rewrite.pack
回复

使用道具 举报

 楼主| 弈飞5566 发表于 2018-8-9 13:19:10 | 显示全部楼层
首先感谢两位的热心回复,互联网因有你们这样的一群人而多姿多彩。
两位所说的都是伪静态(url重写)的设置方法,可能我上面没有表述清楚哈,
讲下问题吧:
我的情况是 Apache 使用的 php的php-fpm模式也就是开启了mod_proxy 和 mod_proxy_fcgi,php是独立的服务。不是把php当Apache模块使用(mod_php),
而且我配置的伪静态是成功的,因为除了首页,其它分页都是伪静态地址了,只是变成 html 地址后不能正常显示了,显示为php的源代码。
在mod_php 模式下 一切都正常,包括伪静态。
php-fpm 模式配置我是参考网上教程,有条指令是需要将 .php 传递给 fcgi
ProxyPassMatch "^/(.*\.php(/.*)?)$" "fcgi://127.0.0.1:9000/usr/local/apache2/htdocs/$1"

因为伪静态 显示源代码的问题,我这几天翻边了网络 头都大了,度娘各种爬,心想要是再搞不定,还是老老实实的用mod_php模式得了。而然心又不甘。
后来找了一个哥们给的梯子,Google了一下问题。看了一老外写的博客,大致意思是说ProxyPassMatch 指令会忽略别名 和 伪静态设置。
I got to scratch my head on this one for a while. If you're writing a PHP-FPM config for Apache 2.4, don't use the ProxyPassMatch directive to pass PHP requests to your FPM daemon.

This will cause you headaches:

# don't
<IfModule mod_proxy.c>
  ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/
</IfModule>
You will much rather want to use a FilesMatch block and refer those requests to a SetHandler that passes everything to PHP.

# do this instead
# Use SetHandler on Apache 2.4 to pass requests to PHP-PFM
<FilesMatch \.php$>
  SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
Why is this? Because the ProxyPassMatch directives are evaluated first, before the FilesMatch configuration is being run.

That means if you use ProxyPassMatch, you can't deny/allow access to PHP files and can't manipulate your PHP requests in any way anymore.

So for passing PHP requests to an FPM daemon, you'd want to use FilesMatch + SetHandler, not ProxyPassMatch.
Using ProxyPassMatch meant that Alias wouldn’t work, RewriteRules were ignored etc etc.

最后改用
<FilesMatch "\.php$">
    SetHandler "proxy:fcgi://localhost:9000"
</FilesMatch>
问题解决了。

回复

使用道具 举报

 楼主| 弈飞5566 发表于 2018-8-9 13:34:41 | 显示全部楼层
最后说下,国内的技术性文章,故障排错文章 大部分都是copy来copy出的。有些基本都没验证过,也不说明。而最让人无语的是你copy就copy吧,你到时copy全啊。
哎,难怪当年学网络 cisco交换路由时 老师讲:“有问题最好Google下,学习国外技术最好看英文原版,要想技术强首先英文得过关”
回复

使用道具 举报

mR.耗子 发表于 2018-8-10 11:53:34 | 显示全部楼层
  可以联系我的QQ交谈 有偿服务解决discuz伪静态问题!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-27 08:41 , Processed in 0.019579 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表