除非我输入index.php,否则我不会收到$ _GET [' url']

时间:2015-12-21 19:15:37

标签: php .htaccess mod-rewrite get

我有一个名为quick-mvc的虚拟主机,我在根目录中有一个.htaccess文件。 我已经激活了mod_rewrite.so。我知道mod_rewrite不推荐,但它是我现在使用的,并希望得到这个工作。谢谢!

.htaccess文件

RewriteEngine on

RewriteCond %[REQUEST_FILENAME] !-d
RewriteCond %[REQUEST_FILENAME] !-f
RewriteCond %[REQUEST_FILENAME] !-l

RewriteRule ^(.+)$ index.php?url=$1 [L]
浏览器ex 1中的

http://quick-mvc/one/two/three/test

$ _ GET [' url']返回" index.php"

浏览器ex 2中的

http://quick-mvc/index.php/one/two/three/test

$ _ GET [' url']返回" index.php / one / two / three / test"

我想要的是什么 我想返回ex 2显示的内容,即使我是否像ex 1一样添加index.php。我也希望index.php不显示。虽然我可以用php轻松编写代码。

1 个答案:

答案 0 :(得分:0)

你的例子让我想起了Drupal如何使用url重写到他们的前端控制器。检查Drupal 7,他们改变了他们这样做的方式。

Drupal 7 .htaccess(剥离):

  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^ index.php [L]

你可以采取类似的方法,然后在index.php中:

<?php 
$url = $_SERVER['REQUEST_URI'];
$parts = parse_url($url);

php函数parse_url应该为你提供路径和查询字符串。

$your_url = $parts['path'];

如果放在网络根目录中,我们会访问此网址:

http://example.com/foo/bar/baz?bat=qux

parse_url给出:

array
  'path' => string '/foo/bar/baz'
  'query' => string 'bat=qux'

查看其他一些框架,了解他们是如何做到的。