【问题标题】:Mod-Rewrite and .htaccess ProblemsMod-Rewrite 和 .htaccess 问题
【发布时间】:2012-07-25 12:36:15
【问题描述】:

Mod_Rewrite 有一些问题。我必须承认这是我第一次尝试这个模块,所以我可能会遇到一些愚蠢的事情。我一直试图让它自己工作一天左右,但我不知道为什么这不起作用。

我收到以下错误:

注意:未定义索引:第 31 行 D:\wamp\www\WildForFashion\Portal\Index.php 中的目录

我想要完成的是能够拥有一个模板页面 (index.php) 并让 Mod_Rewrite 为我更改 url,以便它可以搜索友好并简化编码和设计。

当根本没有加载图像/CSS 文件时,我也遇到了问题,我确实读到使用绝对 url 会起作用。

截至目前,我首先在 PORTAL 目录中工作(这是一个用于网站维护的管理页面),然后将移至根目录。我不确定是否需要一个或两个 .htaccess 文件(一个在根目录中,第二个在门户目录中)。

DIR 文件夹用于保存网站的每个类别和页面,如下所示:

Domain.com/{CATAGORY}/{PAGE}/
ROOT / DIR / {CATAGORY} / {Page}.php

Domain.com/Portal/{CATAGORY}/{PAGE}/
ROOT / Portal / DIR / {CATAGORY} / {Page}.php

.htaccess 之前

RewriteEngine on
RewriteRule ^/Portal/$      Portal/Index.php?Dir=Portal&Page=Home   [L,QSA]
RewriteRule ^Portal/(.*)/(.*)$  Portal/Index.php?Dir=$1&Page=$2 [L,QSA]
RewriteRule ^Portal/(.*)/$      Portal/Index.php?Dir=$1&Page=Home   [L,QSA]

.htaccess 之后(使用异常)

RewriteEngine on
RewriteRule Portal/$     Portal/Index.php?Dir=Portal&Page=Home   [L,QSA]
RewriteRule Portal/([^/]+)/$     Portal/Index.php?Dir=$1&Page=Home   [L,QSA]
RewriteRule Portal/([^/]+)/([^/]+)/$     Portal/Index.php?Dir=$1&Page=$2 [L,QSA]

索引.php

<?php
include_once("DIR/" . $_GET['Dir'] . "/" . $_GET['Page'] . ".php");
?>

目录树

  • CSS
  • 目录
  • IMG
  • JS
  • SRC
  • 传送门
    • CSS
    • 目录
      • 传送门
      • 库存
      • 统计数据
      • 订单
    • IMG
    • JS
    • SRC
    • Index.php
    • .htaccess
  • Index.php

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

    您在匹配规则中包含不需要存在的正斜杠,并将它们从需要存在的重定向路径中排除。试试这个:

    RewriteRule Portal/$      Portal/Index.php?Dir=Portal&Page=Home   [L,QSA]
    
    RewriteRule Portal/(.*)/(.*)$  Portal/Index.php?Dir=$1&Page=$2 [L,QSA]
    
    RewriteRule Portal/(.*)/$      Portal/Index.php?Dir=$1&Page=Home   [L,QSA]
    

    注意,我从重写规则的匹配部分中删除了 ^,因为这表明 taht 应该是 URI 的开头。我还删除了替换模式前面的“/”。

    【讨论】:

    • 试过了,重新启动了 Apache 的 Kicks,什么都没有。 localhost/WildForFashion/Portal ==> 给我同样的错误localhost/WildForFashion/Portal/Inventory ==> 给我一个 404
    • 您是否能够验证重写规则中显示的每种格式的请求实际上是否正确路由到 Index.php 文件?如果可以的话,你可以做一个 $_GET 值的 var_dump。查看您正在使用的 URL 的一些真实示例也会很有帮助
    • var_dump($_GET['Dir']); var_dump($_GET['Page']);两者都返回 null,我得到一个“通知:未定义的索引:”
    • 让我们试试这个。您能否将所有 [L,QSA] 值临时更改为 [R=301,L,QSA]。我想确保重写确实发生了。这会破坏您干净的 URL 一分钟,但会给您积极的反馈,表明您确实得到了正确的 URL 重写,因为您将在浏览器中看到 URL 更改。尝试您尝试使用的所有三种 URL 格式。
    • localhost/WildForFashion/Portal ==> Var_Dump 为空,我在 URL 框中看不到任何变化 localhost/WildForFashion/Portal/Inventory ==> 404(在此服务器上找不到 /WildForFashion/Portal/Inventory)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    相关资源
    最近更新 更多