【问题标题】:Reroute any subdirectory to script将任何子目录重新路由到脚本
【发布时间】:2017-02-06 18:36:06
【问题描述】:

我正在尝试在 Perl Web 项目中设置简单的 url 路由,而不必为此目的包含一个框架。我相信这可以通过 .htaccess 来完成。

该计划是将使用example.com/anysubdirectory/... 对服务器的任何请求路由到一个perl/php 脚本,该脚本将解析/anysubdirectory/... 中包含的任何内容及其后面的参数,然后确定将用户发送到何处基于那个信息。

如果请求没有任何子目录的 example.com,我仍需要在此处保持搜索索引页面的默认行为。

由于/anysubdirectory/ 将是动态的,我无法预定义/123/ -> option 1/abc/ -> option 2

除了典型的 www 和 base 重写之外,我对 htaccess 并不太熟悉。

非常感谢任何帮助。

【问题讨论】:

    标签: php apache perl .htaccess


    【解决方案1】:

    我相信我在根 .htaccess 中使用以下内容回答了我自己的问题:

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ router.pl?action=$1 [L,NC,QSA]
    

    这似乎适用于我的初始测试。

    我相信它是这样工作的:

    • 如果请求的子目录未作为文件找到
    • 如果请求的子目录未作为目录找到
    • 将此重定向到 router.pl 脚本以及原始 url 中的任何剩余参数。

    编辑:以上操作不完全,这仍然会将服务器上找不到的任何文件重定向到 router.pl 脚本。不是我正在寻找的功能,我希望只有当它是子目录而不是无效文件时才会发生这种情况

    不确定我是否希望任何猜测文件名的机器人定期与我的脚本挂钩。

    如果以上任何内容不准确,请更正此回复。

    【讨论】:

    • 既然你这么说RewriteCond %{REQUEST_FILENAME} !-f,如果不是文件就会重定向。如果您希望它用于现有目录,请说-d
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    相关资源
    最近更新 更多