【问题标题】:File names to indicate pseudo directories using mod_rewrite使用 mod_rewrite 指示伪目录的文件名
【发布时间】:2016-02-23 01:34:11
【问题描述】:

是否可以使用文件名字符串作为 mod_rewrite 返回伪目录的指示符?

我会详细说明:

在我的根目录 (public_html) 中,我有一个名为“pages”的目录,其中包含以下文件:

  • example.php

  • 示例--abc.php

  • instance.php

  • instance--2.php

是否有可能,使用 mod_rewrite 来实现以下目标:

example.com/example/ 检索 /pages/example.php

的文件

example.com/example/abc/检索/pages/example--abc.php

的文件

example.com/instance/ 检索 /pages/instance.php

的文件

example.com/instance/2/检索/pages/instance--2.php

的文件

等等...?

到目前为止,我已成功使用以下命令将 /example 指向 /pages/example.php

RewriteCond %{REQUEST_URI} !pages/
RewriteRule ^(.*)$ pages/$1.php [L,QSA]

但是,让由目标文件名中的双连字符 (--) 定义的伪目录正常工作超出了我目前的掌握。

我苦苦寻找解决方案,但无济于事。

此外,上面的代码不允许尾部斜杠(在理想情况下应该如此)

非常感谢任何帮助。

谢谢,

JC

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

    根据描述,你可以试试这个:

    更新

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/pages
    RewriteRule ^([^/]+)/([^/]+)/?$ pages/$1--$2.php [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/pages
    RewriteRule ^([^/]+)/?$ pages/$1.php [L]
    

    【讨论】:

    • 行得通,谢谢肖!访问 example.com 时的根主页试图获取 example.com/pages/index.php.php 我一直在搞乱重写条件,试图产生异常。我试过了: DirectoryIndex pages/index.php 这行得通,但它似乎会影响其他更深的子目录的行为,我已将它们从你建议的重写规则中排除。有什么建议吗?
    • @J-C 很高兴看到它有效。如果此问题已解决,请接受答案。谢谢!对于第二个问题,我认为您可以添加条件以在请求有效文件时跳过重写。这是非常常见的步骤。我更新了答案以包括文件名检查。
    猜你喜欢
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 2020-11-15
    • 2011-10-10
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    相关资源
    最近更新 更多