Apache 行为异常(返回 404)

Apache 行为异常(返回 404)

CentOS 6.4 64 位
Apache 2.4.6
PHP-FPM 5.5.4

从 root 权限访问主页可以正常加载http://csillamvilag.com
但所有其他页面都返回 404(CMS 是 WordPress)。
我也能访问并登录 WordPress 后端。

除主页外,所有 WordPress 页面均无法正常工作(全部返回 404)例如http://csillamvilag.com/csillamtetovalas/csillamtetovalas-tanfolyamok/
http://csillamvilag.com/viszonteladok/
http://www.csillamvilag.com/forumok/

所有 OpenCart 页面均无法正常工作(全部返回 404)
例如http://www.csillamvilag.com/shop/hu/

该问题似乎与 URL 重写有关......

如果我们尝试直接或通过丑陋的 URL 访问文件,似乎或多或少好的,例如http://csillamvilag.com/shop/index.php?route=product/product&product_id=231

但如果我们尝试“漂亮的 URL”或“SEO URL”,则不行,
例如http://www.csillamvilag.com/shop/hu/halvany-lila-strasszko-3mm
(此“漂亮 URL”与上面的丑陋 URL 示例对应的页面相同)

这表明 Apache 中存在 URL 重写问题。影响 WordPress 的 /home/.htaccess 和影响 OpenCart 的 /home/shop/.htaccess 中的重写规则似乎没有问题。例如 WordPress/root .htaccess 为:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Apache 以用户 apache 身份运行。
所有相关的 WordPress 和 OpenCart 文件均归用户 apache 所有。

访问日志

127.0.0.1 - - [07/Nov/2013:02:54:07 +0100] "GET /服务器状态 HTTP/1.1" 404 211

error_log 有几 GB 大,但这里有一个片段

[2013 年 11 月 08 日星期五 01:19:03.018295] [core:info] [pid 35359:tid 139812315064064] [客户端 180.76.5.161:18109] AH00128:文件不存在:/home/shop/en/rhinestones-diamante/peach-rhinestones-3mm
[2013 年 11 月 08 日星期五 01:19:03.615994] [authz_core:debug] [pid 35359:tid 139812105266944] mod_authz_core.c(828):[客户端 66.249.78.16:53716] AH01628:授权结果:已授予(无指令)
[2013 年 11 月 08 日星期五01:19:03.616037 2013] [proxy_fcgi:debug] [pid 35359:tid 139812105266944] mod_proxy_fcgi.c(120):[客户端 66.249.78.16:53716] AH01060:将 r->filename 设置为代理:fcgi://127.0.0.1:9000/home/kepek/index.php/tag/1/h%C3%ADres
[2013 年 11 月 8 日星期五 01:19:03.616054] [proxy:debug] [pid 35359:tid 139812105266944] mod_proxy.c(1100):[客户端66.249.78.16:53716] AH01143:正在运行方案 fcgi 处理程序(尝试 0)
[2013 年 11 月 8 日星期五 01:19:03.616061] [proxy_fcgi:debug] [pid 35359:tid 139812105266944] mod_proxy_fcgi.c(944):[客户端 66.249.78.16:53716] AH01076:url:fcgi://127.0.0.1:9000/home/kepek/index.php/tag/1/h%C3%ADres 代理名称:(null)代理端口:0
[2013 年 11 月 8 日星期五 01:19:03.616067] [proxy_fcgi:debug] [pid 35359:tid 139812105266944] mod_proxy_fcgi.c(954): [客户端 66.249.78.16:53716] AH01078:服务 URL //127.0.0.1:9000/home/kepek/index.php/tag/1/h%C3%ADres [2013 年 11 月 8 日星期五 01:19:03.616073] [proxy:debug] [pid 35359:tid 139812105266944] proxy_util.c(2020): AH00942:FCGI:已获取连接() [2013 年 11 月 08 日星期五 01:19:03.616081] [proxy:debug] [pid 35359:tid 139812105266944] proxy_util.c(2072):[客户端 66.249.78.16:53716] AH00944:连接 //127.0.0.1:9000/home/kepek/index.php/tag/1/h%C3%ADres 到 127.0.0.1:9000 [2013 年 11 月 08 日星期五 01:19:03.616131] [proxy:debug] [pid 35359:tid 139812105266944] proxy_util.c(2194):[客户端66.249.78.16:53716] AH00947:已将 /home/kepek/index.php/tag/1/h%C3%ADres 连接到 127.0.0.1:9000
[2013 年 11 月 8 日星期五 01:19:03.783318] [proxy:debug] [pid 35359:tid 139812105266944] proxy_util.c(2035):AH00943:FCGI:已释放连接(
)
[2013 年 11 月 8 日星期五 01:19:04.099220] [authz_core:debug] [pid 35359:tid 139812199675648] mod_authz_core.c(802): [client 66.249.78.16:55790] AH01626:Require all 的授权结果已授予:已授予
[2013 年 11 月 8 日星期五 01:19:04.099243] [authz_core:debug] [pid 35359:tid 139812199675648] mod_authz_core.c(802): [client 66.249.78.16:55790] AH01626:授权结果:已授予 [2013 年
11 月 8 日星期五01:19:04.099261 2013] [core:info] [pid 35359:tid 139812199675648] [客户端 66.249.78.16:55790] AH00128:文件不存在:/home/shop/en/facepaints/mehron-paradise-facepaints

httpd配置文件

ServerRoot "/usr/local/apache2"

Listen 80

LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule unique_id_module   modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule security2_module modules/mod_security2.so

<IfModule unixd_module>
user apache
group www-data
</IfModule>

ServerAdmin [email protected]

ServerName domain.com:80

<Directory />
   AllowOverride all
</Directory>

DocumentRoot "/home"

<Directory "/home">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog "logs/error_log"

LogLevel debug

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
CustomLog "logs/access_log" common
</IfModule>

<IfModule alias_module>
    Alias /php5.cgi /usr/local/bin/php-cgi  
    ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
</IfModule>

<Directory "/usr/local/apache/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>

Include conf/extra/httpd-vhosts.conf

<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

AccessFileName .htaccess

答案1

你代码中的这段代码httpd.conf是罪魁祸首:

<Directory "/home">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

如果设置了,则.htaccess不会加载AllowOverride None。应将其更改为AllowOverride All

<Directory "/home">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

然后重新启动 Apache 服务,一切就好了。

“允许覆盖”是指.htaccess文件如何覆盖 Apache 服务器设置。更多信息请访问这一页

相关内容