【问题标题】:Htaccess Rewrite RuleHtaccess 重写规则
【发布时间】:2010-03-13 05:04:01
【问题描述】:

我对 .htaccess 和重写规则感到疯狂。 我想了解它是如何工作的,我讨厌它,无论如何这是我的问题。

(对你们大多数人来说真的很简单)

我的网站有一个主页index.php。 这是唯一的一页,其他的都由这一页处理。

我做了一个简单的RewriteRule:

RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?page=$1

这样做:

/index.php?page=VAL -> /VAL

但我不知道如何为此创建规则:

/index.php?page=VAL&var1=VAL2&var2=VAL3 etc.

我想要一个最终到达网址,例如:

/VAL/VAL2/VAL3 etc.

谢谢

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    您可以将请求重写为 index.php 并使用 PHP 解析请求的 URI 路径:

    $_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    $segments = implode('/', ltrim($_SERVER['REQUEST_URI_PATH'], '/'));
    

    规则如下:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule !^index\.php$ index.php [L]
    

    这将重写每个请求,即 URI 路径无法映射到现有文件,映射到您的 index.php

    【讨论】:

    • 好的,如果我理解得很好,RewriteCond 会检查 uripath 是否不是文件,但你能解释一下 RewriteRule 的作用吗?谢谢
    • @Marcx:RewriteRule 将重写任何请求,即 URI 路径(没有路径前缀)不是index.php,改为index.php
    • 啊谢谢.. 所以! 不是index.php(路径前缀)将被重写为index.php 好的,非常感谢..
    • @Marcx:哦,是的,! 在开头否定了表达式。因此,如果 ^index\.php$ 不匹配,则应用该规则。
    猜你喜欢
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多