【问题标题】:htaccess mod_rewrite not detects params for projecthtaccess mod_rewrite 未检测到项目的参数
【发布时间】:2014-10-17 22:04:41
【问题描述】:

我开始了一个基于http://www.php-mvc.net/的php项目,我在谷歌上搜索了如何设置我的WAMP Server来启用URL重写。

我正在运行最新版本的 WAMP。

1) 在httpd.conf 上启用mod_rewrite 模块

2) 在httpd-vhosts.conf 我添加了一个虚拟主机

<VirtualHost *:80>
ServerName phpmvc.test
ServerAlias *.phpmvc.test
VirtualDocumentRoot "C:\wamp\www\phpmvc"
ErrorLog "logs\errors.log"
<directory "C:\wamp\www\phpmvc">
    Options Indexes FollowSymLinks
    AllowOverride all
    Order Deny,Allow
    Deny from all
    Allow from all
</directory>

3) 在我的 hosts 文件中,我添加了主机 127.0.0.1 phpmvc.test

4) 在 .htacces 文件中我有这几行

RewriteEngine on
RewriteRule ^(.*)\/$ index.php?url=$1 [QSA,L]

我在设置文件后重新启动了 Apache,当我转到 phpmvc.test 时它工作正常,但是当我尝试 phpmvc.test/test 时它显示一个错误,指出在此服务器上找不到请求的 URL。

编辑:我尝试使用 RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 但它显示相同的错误 EDIT2:我尝试了 EDIT:我尝试了 Rahil Wazir 的建议,但它仍然无法正常工作。

我有这个控制器文件IndexController.class.php,如果我使用这个 URL 访问它可以工作:phpmvc.test?url=index,但如果我尝试phpmvc.test/index,它会说在服务器上找不到index

<?php

class IndexController {

    public static function index() {

        echo "Index controller";

    }
}

在 root 上打印 $_GET$_SERVER 我得到一个空的 Array() 和服务器数组。如果我去phpmvc.test/index?url=index 我会得到$_GET["url"]$_SERVER [QUERY_STRING] =&gt; url=index 上的值。

【问题讨论】:

  • 您的 RewriteRule 取决于传入路径的尾随 / 斜杠。

标签: php .htaccess mod-rewrite wamp


【解决方案1】:

这是因为 Apache 认为 /test 是您尝试访问的可能不存在的文件或目录。

您需要应用大多数 Front controller pattern 框架使用的这两个著名条件:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

这告诉 Apache 重写模块,除非请求的 uri 中的文件或目录存在,然后应用重写规则,否则呈现文件或目录的内容。

【讨论】:

  • 我添加了你说我的行,但错误仍然存​​在:/
【解决方案2】:

通过检查 $_GET 和 $_SERVER 变量中的内容进行调试。

print_r($_GET);
print_r($_SERVER);

比较 ['url'] 索引值的差异。 此外,它可能取决于您在 /index 之前的 URL 上看到的子文件夹深度。

【讨论】:

  • 我添加了你告诉我的信息
猜你喜欢
  • 2014-08-19
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 2015-10-22
相关资源
最近更新 更多