【问题标题】:redirect url that matches directory otherwise重定向与目录匹配的 url,否则
【发布时间】:2016-02-16 14:11:04
【问题描述】:

我经常使用重定向,但尽管进行了搜索,但我无法实现我的目标。

我想要达到的目标:

  • /aaaa 的请求重定向到/articles/aaaa.php 但只在浏览器中显示/aaaa(这已经工作多年了)
  • /bbbb(一个目录)的请求,不存在同名文件,必须重定向到/products/bbbb/index.php(但只在浏览器中显示/bbbb)*

这是我现在使用的:

RewriteRule ^([a-z0-9-_]+)$ /articles/$1.php [NC,L]

*作为替代方案,如果它太复杂,这没关系:对 /bbbb 的请求(这是一个不存在具有此名称的文件的目录)重定向到 /products/bbbb (并且在目录 /products/bbbb 我会使用本地 .htaccess 将其提取并重定向到 index.php) 仍然在浏览器中 /bbbb 应该显示。

【问题讨论】:

  • "对/bbbb 的请求,这是一个目录" - 虽然我假设/bbbb 实际上不是文件系统上的目录,但应该在内部重写/products 目录中是否存在同名目录?
  • 确实,bbbb是fs中的一个目录所以有一个目录/products/bbbb

标签: .htaccess directory


【解决方案1】:

重写/articles 目录中的文件时,您可以先检查它是否存在(作为文件)。例如:

RewriteCond %{DOCUMENT_ROOT}/articles/$1.php -f
RewriteRule ^([a-z0-9-_]+)$ /articles/$1.php [L]

我还删除了NC 标志,除非您明确需要它?

同样内部重写到目录:

RewriteCond %{DOCUMENT_ROOT}/products/$1/index.php -f
RewriteRule ^([a-z0-9-_]+)$ /products/$1/index.php [L]

这实际上检查了index.php 文件 是否存在,而不是父目录,因为您最终要重写到文件,而不是目录。

【讨论】:

    猜你喜欢
    • 2013-01-18
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多