• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

url-rewrite – 用 apache rewrite 和 php 实现单一入口时候出现的一个问题

php 搞代码 3年前 (2022-01-25) 20次浏览 已收录 0个评论
文章目录[隐藏]

我想用 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	Options FollowSymLinks	AllowOverride None	#AllowOverride All 			RewriteEngine on		RewriteBase /		#不显示index.php		RewriteC<span style="color:transparent">本文来源gaodai#ma#com搞*!代#%^码$网!</span><strong>搞代gaodaima码</strong>ond %{REQUEST_FILENAME} !-d		RewriteCond %{REQUEST_FILENAME} !-f		RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]		#RewriteRule ^(.*)$ index.php?$1 [QSA,L]		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	Options FollowSymLinks	AllowOverride None	#AllowOverride All 			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]		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    RewriteLog "/var/log/apache2/rewrite.log"    RewriteLogLevel 3

http://httpd.apache.org/docs/2.2/mod/&#8230;

另外,rewrite 规则完全没有必要写道 httpd.conf 里面,使用 .htaccess 比较好。

httpd.conf

DocumentRoot /home/www    Options FollowSymLinks    AllowOverride None    #AllowOverride All     Options Indexes FollowSymLinks MultiViews    AllowOverride None    #AllowOverride All     Order allow,deny    allow from all    DirectoryIndex index.php index.html index.htm

/home/www/.htaccess

        RewriteEngine on        #不显示index.php        RewriteBase /        RewriteCond %{REQUEST_FILENAME} !-d        RewriteCond %{REQUEST_FILENAME} !-f                RewriteRule ^(.*)$ index.php?$1 [QSA,PT,L]

RewriteCond %{SCRIPT_FILENAME} !-fRewriteCond %{SCRIPT_FILENAME} !-dRewriteRule ^(.*)$ index.php/$1

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:url-rewrite – 用 apache rewrite 和 php 实现单一入口时候出现的一个问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址