第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > url-rewrite – 用 apache rewrite 和 php 实现单一入口时候出现的一个问题

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

时间:2019-01-26 00:10:59

相关推荐

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

后端开发|php教程

apache,php,url-rewrite

后端开发-php教程

我想用 Apache 的 rewrite 在 php 中实现单一入口,把所有的请求都重定向到 index.php,然后分析 $_SERVER[‘REQUEST_URI’],构建路由功能。

医疗器械管理系统 源码,ubuntu图片改gif,运行tomcat输入网址,爬虫抓取图表,php原生查询,法库企业抖音seo优化包括什么lzw

在使用时候时候出现了一个问题,请求其他的地址,比如 http://localhost/a/b/c 可以获得结果

android 源码,vscode关闭资源管理器,ubuntu 复制替换,配置tomcat虚拟机,历史通用爬虫,php卡盟网站源码,娄烦seo优化费用是多少lzw

array (size=4) 0 => string \ (length=0) 1 => string a (length=1) 2 => string  (length=1) 3 => string c (length=1)

但是如果是 http://localhost/index 就会提示404错误,这是为什么啊

crm 源码下载,vscode标签不变色,ubuntu 修复 断电,改变tomcat时间格式,植物 爬虫,php站内短信,seo内容撰写实例,html5美食网站首页,搜索结果页面html模板lzw

index.php大概是这样

<?php........function analysisUri() { var_dump(explode(/, $_SERVER[REQUEST_URI]));}echo $_SERVER[REQUEST_URI];analysisUri();........

virtualhost配置是这样

这个rewrite规则是从网上找到的

DocumentRoot /home/wwwOptions FollowSymLinksAllowOverride None#AllowOverride All RewriteEngine onRewriteBase /#不显示index.phpRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]#RewriteRule ^(.*)$ index.php?$1 [QSA,L]Options Indexes FollowSymLinks MultiViewsAllowOverride None#AllowOverride All Order allow,denyallow from allDirectoryIndex 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  (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/wwwOptions FollowSymLinksAllowOverride None#AllowOverride All RewriteEngine onRewriteBase /#不显示index.phpRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]#RewriteRule ^(.*)$ index.php?$1 [QSA,L]Options Indexes FollowSymLinks MultiViewsAllowOverride None#AllowOverride All Order allow,denyallow from allDirectoryIndex 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

/docs/2.2/mod/…

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

httpd.conf

DocumentRoot /home/www Options FollowSymLinks AllowOverride None #AllowOverride AllOptions Indexes FollowSymLinks MultiViews AllowOverride None #AllowOverride AllOrder 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} !-fRewriteRule ^(.*)$ index.php?$1 [QSA,PT,L]

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。