【发布时间】:2012-02-03 22:14:33
【问题描述】:
我正在开发一个 MVC PHP 应用程序。
我的 .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ /mvc/index.php?url=$1 [QSA,L]
我的 index.php:
<?php
$url = $_REQUEST['url'];
echo $url;
因此,当我在 url 中写入 (mysite.com/mvc/help) 之类的内容时,php 会在主页上打印 (help)。它适用于我在 url 中写的所有内容,例如 (mysite.com/mvc/index/log) 返回 (index/log) 但如果我写 (mysite.com/mvc/index) 那么我没有错误但是没有显示任何内容,并且 $url 未设置!
我希望我解释正确。 干杯
编辑:我犯了一个错误,(mysite.com/mvc/index/log) 什么也没返回。似乎如果第一个单词是“index”它不起作用,因为如果 url 像 (mysite.com/mvc/log/index) 它起作用并返回 (log/index)。
我还在 index.php (print_r($_GET);) 中添加了一行,当 url 类似于 (mysite.com/mvc/index/log 或 mysite.com/mvc/) 时返回一个空数组索引),如果这可以帮助...
经过一番调查,我认为问题在于“索引”这个词是用“.html”或“.php”自动完成的,我不知道如何摆脱它......
解决方案: 这是我的 htaccess 工作:
Options -Indexes +FollowSymLinks -Multiviews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ /mvc/index.php?url=$1 [L]
【问题讨论】:
-
会不会是第三个 RewriteCond?我总是使用 !-d 和 !-f,但以前从未见过 !-l。它有什么作用?
-
!-d 是“不是文件夹”,!-f 是“不是文件”,!-l 是“不是链接”。我试过没有它,但我遇到了同样的问题。
标签: php .htaccess mod-rewrite url-rewriting indexing