찾다
백엔드 개발PHP 튜토리얼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></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>
	Options Indexes FollowSymLinks MultiViews
	AllowOverride None
	#AllowOverride All 
	Order allow,deny
	allow from all

	DirectoryIndex index.php index.html index.htm

回复内容:

我想用 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></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>
	Options Indexes FollowSymLinks MultiViews
	AllowOverride None
	#AllowOverride All 
	Order allow,deny
	allow from all

	DirectoryIndex index.php index.html index.htm

你的规则有问题。

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></directory>
    Options FollowSymLinks
    AllowOverride None
    #AllowOverride All 


<directory></directory>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    #AllowOverride All 
    Order allow,deny
    allow from all

    DirectoryIndex index.php index.html index.htm

/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
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
图文详解apache2.4+php8.0的安装配置方法图文详解apache2.4+php8.0的安装配置方法Dec 06, 2022 pm 04:53 PM

本文给大家介绍如何安装apache2.4,以及如何配置php8.0,文中附有图文详细步骤,下面就带大家一起看看怎么安装配置apache2.4+php8.0吧~

apache版本怎么查看?apache版本怎么查看?Jun 14, 2019 pm 02:40 PM

查看​apache版本的步骤:1、进入cmd命令窗口;2、使用cd命令切换到Apache的bin目录下,语法“cd bin目录路径”;3、执行“httpd -v”命令来查询版本信息,在输出结果中即可查看apache版本号。

Linux apache怎么限制并发连接和下载速度Linux apache怎么限制并发连接和下载速度May 12, 2023 am 10:49 AM

mod_limitipconn,这个是apache的一个非官方模块,根据同一个来源ip进行并发连接控制,bw_mod,它可以根据来源ip进行带宽限制,它们都是apache的第三方模块。1.下载:wgetwget2.安装#tar-zxvfmod_limitipconn-0.22.tar.gz#cdmod_limitipconn-0.22#vimakefile修改:apxs=“/usr/local/apache2/bin/apxs”#这里是自己apache的apxs路径,加载模块或者#/usr/lo

超细!Ubuntu20.04安装Apache+PHP8环境超细!Ubuntu20.04安装Apache+PHP8环境Mar 21, 2023 pm 03:26 PM

本篇文章给大家带来了关于PHP的相关知识,其中主要跟大家分享在Ubuntu20.04 LTS环境下安装Apache的全过程,并且针对其中可能出现的一些坑也会提供解决方案,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

nginx,tomcat,apache的区别是什么nginx,tomcat,apache的区别是什么May 15, 2023 pm 01:40 PM

1.Nginx和tomcat的区别nginx常用做静态内容服务和代理服务器,直接外来请求转发给后面的应用服务器(tomcat,Django等),tomcat更多用来做一个应用容器,让javawebapp泡在里面的东西。严格意义上来讲,Apache和nginx应该叫做HTTPServer,而tomcat是一个ApplicationServer是一个Servlet/JSO应用的容器。客户端通过HTTPServer访问服务器上存储的资源(HTML文件,图片文件等),HTTPServer是中只是把服务器

php站用iis乱码而apache没事怎么解决php站用iis乱码而apache没事怎么解决Mar 23, 2023 pm 02:48 PM

​在使用 PHP 进行网站开发时,你可能会遇到字符编码问题。特别是在使用不同的 Web 服务器时,会发现 IIS 和 Apache 处理字符编码的方法不同。当你使用 IIS 时,可能会发现在使用 UTF-8 编码时出现了乱码现象;而在使用 Apache 时,一切正常,没有出现任何问题。这种情况应该怎么解决呢?

如何在 RHEL 9/8 上设置高可用性 Apache(HTTP)集群如何在 RHEL 9/8 上设置高可用性 Apache(HTTP)集群Jun 09, 2023 pm 06:20 PM

Pacemaker是适用于类Linux操作系统的高可用性集群软件。Pacemaker被称为“集群资源管理器”,它通过在集群节点之间进行资源故障转移来提供集群资源的最大可用性。Pacemaker使用Corosync进行集群组件之间的心跳和内部通信,Corosync还负责集群中的投票选举(Quorum)。先决条件在我们开始之前,请确保你拥有以下内容:两台RHEL9/8服务器RedHat订阅或本地配置的仓库通过SSH访问两台服务器root或sudo权限互联网连接实验室详情:服务器1:node1.exa

Linux下如何查看nginx、apache、mysql和php的编译参数Linux下如何查看nginx、apache、mysql和php的编译参数May 14, 2023 pm 10:22 PM

快速查看服务器软件的编译参数:1、nginx编译参数:your_nginx_dir/sbin/nginx-v2、apache编译参数:catyour_apache_dir/build/config.nice3、php编译参数:your_php_dir/bin/php-i|grepconfigure4、mysql编译参数:catyour_mysql_dir/bin/mysqlbug|grepconfigure以下是完整的实操例子:查看获取nginx的编译参数:[root@www~]#/usr/lo

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.