【问题标题】:Redirect to dynamic relative paths with .htaccess?使用.htaccess 重定向到动态相对路径?
【发布时间】:2012-03-24 08:50:18
【问题描述】:

是否可以让 .htaccess “理解”动态相对路径并正确重定向到它们?

我的设置如下:

http://domain.com/htroot/aaa/xyz
http://domain.com/htroot/bbb/xyz
http://domain.com/htroot/ccc/xyz

等等。为了示例,“htroot”包含我需要修改的 .htaccess。以下子级别(aaa、bbb、ccc)可以是任何 a-z0-9 名称,并且文件夹具有 index.php(或要重定向到的任何其他 .php)。 xyz 应该用作各种参数,请参阅下一部分。 xyz 部分在文件系统中没有作为“物理”文件夹或文件存在。

我需要实现的是:当你使用 url 访问时

http://domain.com/htroot/aaa/xyz

它从

获取内容
http://domain.com/htroot/aaa/ (or http://domain.com/htroot/aaa/index.php, either way)

index.php 的作用 -> 我可以从 REQUEST_URI 中获取 xyz 并对其进行处理以提供它指定的正确内容,而页面的 URL 自然保持为 http://domain.com/htroot/aaa/xyz

到目前为止,如果每个子级别(aaa 等)都有自己的 .htaccess,我已经设法解决了这个问题,但我需要一个在 htroot 中只有一个 .htaccess 来处理这个问题的。我猜这可能与 .htaccess 中的 $0 参数有关,但不确定。

【问题讨论】:

    标签: regex .htaccess redirect


    【解决方案1】:

    您可能想要执行以下操作:

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/(.*)$ /htroot/$1/index.php?data=$2 [L]
    

    如果第一个通配符匹配(.*)aaa,第二个通配符匹配(.*)xyz (htroot/aaa/xyz) 它将从

    htroot/aaa/index.php?data=xyz

    您将能够使用$_GET['data']

    在 index.php 中获取值 xyz

    【讨论】:

    • 如果 htaccess 在 root 中,则 url 的 htroot 部分将被删除。如果 htaccess 在 htroot 中(如 Harri 所述),您需要从代码中删除 htroot/。我也认为这段代码创建了一个无限循环。
    • 啊,我错过了循环。对不起!如果文件/目录不存在,则添加了重写条件以仅执行重写规则。使用RewriteCond %{REQUEST_FILENAME} !index\.php$ 是另一种可能性。
    • 光荣。正是我正在寻找的东西并按预期工作,非常感谢!
    【解决方案2】:

    好的,我不明白它的工作方式,我想我还有很多东西要学习 mod_rewrite。

    但是像这样在 htroot/.htaccess 文件中,它可以工作:

    RewriteEngine On
    RewriteRule ^aaa/(.*)$ aaa/index.php?$1 [L,QSA]
    RewriteRule ^bbb/(.*)$ bbb/index.php?$1 [L,QSA]
    RewriteRule ^ccc/(.*)$ ccc/index.php?$1 [L,QSA]
    

    您将能够访问 $_GET['xyz'] 或您在 index.php 脚本中 / 之后放置的任何内容。您还将在 $_GET 数组中获得额外的“index_php”条目,但我猜这是内部重定向的工作方式。

    【讨论】:

    • 在某种程度上有效,但恐怕不是动态的。我可能有几个或一百个 aaa/bbb/ccc/ddd 等文件夹,因此需要始终与文件夹保持同步。
    【解决方案3】:

    这应该作为一个通用规则集:

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !\.php 
    RewriteRule ^(.*)/(.*) /htroot/$1/index.php?parameters=$2 [L,QSA]
    

    【讨论】:

    • 与上面的想法相同。效果也很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多