url-rewrite - 用 apache rewrite 和 php 实现单一入口时候出现的一个问题
我想用 Apache 的 rewrite 在 php 中实现单一入口,把所有的请求都重定向到 index.php,然后分析 $_SERVER['REQUEST_URI'],构建路由功能。
在使用时候时候出现了一个问题,请求其他的地址,比如 http://localhost/a/b/c 可以获得结果
array (size=4) 0 => string '' (length=0) 1 => string 'a' (length=1) 2 => string 'b' (length=1) 3 => string 'c' (length=1)
但是如果是 http://localhost/index 就会提示404错误,这是为什么啊
index.php大概是这样
<?php ........ function analysisUri() { var_dump(explode('/', $_SERVER['REQUEST_URI'])); } echo $_SERVER['REQUEST_URI']; analysisUri(); ........
virtualhost配置是这样
这个rewrite规则是从网上找到的
DocumentRoot /home/www <Directory /> Options FollowSymLinks AllowOverride None #AllowOverride All <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / #不显示index.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] #RewriteRule ^(.*)$ index.php?$1 [QSA,L] </IfModule> </Directory> <Directory /home/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None #AllowOverride All Order allow,deny allow from all DirectoryIndex index.php index.html index.htm </Directory>
回复内容:
我想用 Apache 的 rewrite 在 php 中实现单一入口,把所有的请求都重定向到 index.php,然后分析 $_SERVER['REQUEST_URI'],构建路由功能。
在使用时候时候出现了一个问题,请求其他的地址,比如 http://localhost/a/b/c 可以获得结果
array (size=4) 0 => string '' (length=0) 1 => string 'a' (length=1) 2 => string 'b' (length=1) 3 => string 'c' (length=1)
但是如果是 http://localhost/index 就会提示404错误,这是为什么啊
index.php大概是这样
<?php ........ function analysisUri() { var_dump(explode('/', $_SERVER['REQUEST_URI'])); } echo $_SERVER['REQUEST_URI']; analysisUri(); ........
virtualhost配置是这样
这个rewrite规则是从网上找到的
DocumentRoot /home/www <Directory /> Options FollowSymLinks AllowOverride None #AllowOverride All <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / #不显示index.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] #RewriteRule ^(.*)$ index.php?$1 [QSA,L] </IfModule> </Directory> <Directory /home/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None #AllowOverride All Order allow,deny allow from all DirectoryIndex index.php index.html index.htm </Directory>
你的规则有问题。
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
行不通的,正确的应该是 RewriteRule ^(.*)$ index.php?$1 [QSA,PT,L]
。?
才会吧后面的 $1
传给 index.php,而 /
告诉 apache 查找 index.php/
目录下的 index 文件,自然是 404。
你可以添加如下配置到 httpd.conf,调试 mod_rewrite,通过查看 rewrite.log 文件可以知道通过 rewrite 得到的路径到底是什么,完成调试后移除这个配置,否则会有些性能安全方面的影响。
# 输出调试信息到 rewrite.log <IfModule mod_rewrite.c> RewriteLog "/var/log/apache2/rewrite.log" RewriteLogLevel 3 </IfModule>
http://httpd.apache.org/docs/2.2/mod/...
另外,rewrite 规则完全没有必要写道 httpd.conf 里面,使用 .htaccess 比较好。
httpd.conf
DocumentRoot /home/www <Directory /> Options FollowSymLinks AllowOverride None #AllowOverride All </Directory> <Directory /home/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None #AllowOverride All Order allow,deny allow from all DirectoryIndex index.php index.html index.htm </Directory>
/home/www/.htaccess
<IfModule mod_rewrite.c> RewriteEngine on #不显示index.php RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?$1 [QSA,PT,L] </IfModule>
RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP在数据库操作和服务器端逻辑处理中使用MySQLi和PDO扩展进行数据库交互,并通过会话管理等功能处理服务器端逻辑。1)使用MySQLi或PDO连接数据库,执行SQL查询。2)通过会话管理等功能处理HTTP请求和用户状态。3)使用事务确保数据库操作的原子性。4)防止SQL注入,使用异常处理和关闭连接来调试。5)通过索引和缓存优化性能,编写可读性高的代码并进行错误处理。

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP用于构建动态网站,其核心功能包括:1.生成动态内容,通过与数据库对接实时生成网页;2.处理用户交互和表单提交,验证输入并响应操作;3.管理会话和用户认证,提供个性化体验;4.优化性能和遵循最佳实践,提升网站效率和安全性。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

PHP的核心优势包括易于学习、强大的web开发支持、丰富的库和框架、高性能和可扩展性、跨平台兼容性以及成本效益高。1)易于学习和使用,适合初学者;2)与web服务器集成好,支持多种数据库;3)拥有如Laravel等强大框架;4)通过优化可实现高性能;5)支持多种操作系统;6)开源,降低开发成本。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。
