我的网站是用PHP编写的采用CI框架结构,现在访问网址为www.abc.com/index.php/admin/login可以正常显示网页内容,但访问www.abc.com/admin/login却提示404错误,我将伪静态文件.htaccess文件上传到网站根目录下及system目录下,文件内容如下:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^(index.php|images|robots.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
但不起作用,哪位大神帮忙看下有什么问题
(www.abc.com是虚构网址)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的信息,问题的核心是访问 www.abc.com/admin/login 时出现 404 错误,而 www.abc.com/index.php/admin/login 可以正常显示内容。这表明伪静态规则未正确生效,导致 Web 服务器无法正确解析 URL 请求。以下是详细的排查和解决方案:
伪静态规则依赖于 Apache 的 mod_rewrite 模块。如果该模块未启用,伪静态规则将无法生效。
mod_rewrite 是否已启用:
apachectl -M | grep rewrite
如果返回结果中包含 rewrite_module,说明模块已启用;否则需要启用它。
/etc/httpd/conf/httpd.conf 或 /etc/apache2/apache2.conf),找到以下行并确保其未被注释:
LoadModule rewrite_module modules/mod_rewrite.so
systemctl restart httpd
或
service apache2 restart
.htaccess 文件的权限和位置正确.htaccess 文件需要放置在正确的目录,并且具有适当的权限。
.htaccess 文件已上传到网站根目录(例如 /htdocs 或 /var/www/html)。.htaccess 文件的权限,确保其可被 Apache 读取:
chmod 644 /path/to/your/.htaccess
.htaccess 文件覆盖默认设置。编辑 Apache 配置文件,找到 <Directory> 块,确保 AllowOverride 设置为 All:
<Directory "/var/www/html">
AllowOverride All
</Directory>
.htaccess 文件内容您提供的 .htaccess 文件内容可能存在一些问题,建议调整为以下标准格式:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f:确保请求的文件不存在。RewriteCond %{REQUEST_FILENAME} !-d:确保请求的目录不存在。RewriteRule ^(.*)$ index.php/$1 [L]:将所有请求重写到 index.php,并附加原始路径。CodeIgniter 框架的配置文件可能需要调整以支持伪静态。
application/config/config.php。$config['index_page'] = '';
$config['base_url'] = 'http://www.abc.com/';
$config['index_page'] 设置为空字符串,表示不使用 index.php。$config['base_url'] 包含正确的域名。如果上述步骤仍未解决问题,可以通过查看 Apache 的错误日志进一步排查。
/var/log/httpd/error_log 或 /var/log/apache2/error.log):
tail -f /var/log/httpd/error_log
完成上述步骤后,重新访问 www.abc.com/admin/login,确认问题是否解决。如果仍然提示 404 错误,请检查以下内容: - 确保 admin 控制器和 login 方法在 CodeIgniter 中已正确定义。 - 确保路由配置文件 application/config/routes.php 中未限制对 admin/login 的访问。
通过以上步骤,您可以逐步排查并解决伪静态规则未生效的问题。如果问题仍未解决,建议联系阿里云技术支持,提供详细的错误日志以便进一步分析。