.htaccess mod_rewrite在url

时间:2017-01-14 19:00:11

标签: .htaccess redirect mod-rewrite webserver apache2

我正在开展一个小小的PHP项目。

为此,创建了一个简单的路由器类,它接受GET参数的值,将其拆分并调用所请求的类和方法。

我的.htaccess文件应该重写请求的网址,以便我可以调用

  

http://localhost/class/function

应该重定向到

  

http://localhost/index.php?route=class/function

到目前为止一切顺利。这是使用以下.htaccess文件:

DirectoryIndex index.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=$1 [QSA]

但现在,如果我试图访问基本网址

  

http://localhost

我正被重定向到

  

http://localhost/var/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.php

我无法解释自己。

老实说,直到现在我还没有使用mod_rewrite工作,但这种行为对我来说很奇怪。

希望有人能帮助我。

谢谢你们。

编辑2017-01-15

看起来它与htaccess文件无关。

起初我用validator测试了我的文件,看起来它的效果就像我想要的那样。

我试图删除htaccess文件,但仍然存在同样的问题。 所以我认为它是由apache2 webserver引起的。

我将虚拟主机中的LogLevel设置为debug并从中获取以下信息:

  

[Sun Jan 15 09:33:41.684274 2017] [authz_core:debug] [pid 2183] mod_authz_core.c(809):[client 10.0.2.2:49743] AH01626:要求所有授权的授权结果:已授予

     

[Sun Jan 15 09:33:41.684355 2017] [authz_core:debug] [pid 2183] mod_authz_core.c(809):[client 10.0.2.2:49743] AH01626:授权结果:已授予

     

[Sun Jan 15 09:33:41.684445 2017] [core:info] [pid 2183] [client 10.0.2.2:49743] AH00128:文件不存在:/ var / www / public / var / www / public /index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index .phpvar / WWW /公共/ index.phpvar / WWW /公共/ index.phpvar / WWW /公共/ index.phpvar / WWW /公共/ index.phpvar / WWW /公共/ index.phpvar / WWW /公共/ index.phpvar /www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www /public/index.php

这对我来说毫无意义。我的虚拟主机配置文件不包含重写规则。

1 个答案:

答案 0 :(得分:0)

引起的问题是因为每次访问localhost时它都会循环。 尝试通过添加[L] Flag来停止此循环,如下面的代码: RewriteRule ^(.*)$ /index.php?route=$1 [L,QSA]

<强>更新 我已经创建了一个适合我的例子:

我创建了一个带有页面参数的主索引页面。因此,像index.php?class=software这样的链接会将您带到软件页面,而指向index.php?class=test的链接会将您带到测试页面。使用mod_rewrite会静默地将用户从类/ software /重定向到index.php?class=software等。

以下是需要进入.htaccess文件才能实现的目的:

RewriteEngine on RewriteRule ^class/([^/\.]+)/?$ index.php?class=$1 [L]

访问index.php页面时也不会循环