【问题标题】:How to check if REQUEST_URI is not empty in apache RewriteCond httpd.conf?如何检查 apache RewriteCond httpd.conf 中的 REQUEST_URI 是否为空?
【发布时间】:2016-04-27 04:21:27
【问题描述】:

Problem detecting empty REQUEST_URI with Apache mod_rewrite 中提到我们可以使用

RewriteCond %{REQUEST_URI} ^.$

RewriteCond %{REQUEST_URI} "^/$"

我需要检查它是否不为空,然后将其重定向到一个空的(忽略HTTP_HOST之后的所有字符串)。

我试过了

RewriteCond %{REQUEST_URI} !"^/$"
RewriteRule .*  http://%{HTTP_HOST} [L,R=301]

但不起作用。它只是导致了一个无限循环。

我也试过RewriteCond %{REQUEST_URI} !^/$RewriteCond %{REQUEST_URI} !^\/$RewriteCond %{REQUEST_URI} "!^/$"RewriteCond %{REQUEST_URI} "!^\/$"

【问题讨论】:

    标签: apache mod-rewrite


    【解决方案1】:

    这个怎么样:

    RewriteRule ^/.+$ http://%{HTTP_HOST} [L,R=301]

    【讨论】:

    • 它不起作用。当我尝试xx.com/asdf 时,它确实重定向到xx.com。但随后它导致了一个无限循环 ag
    • 仅对您的站点名称 (xx.com) 的请求仍然可以提供一些服务。你必须设置一个条件来忽略那个东西。如果您只是请求站点的名称 (xx.com),那么无论您的 DirectoryIndex 指令指向什么,都将为您提供服务,默认为 /index.html。因此,您必须放入前面的条件以避免执行该特定 URI。例如: RewriteCond %{REQUEST_URI} !^/index.html$ RewriteRule ^/.+$ http://%{HTTP_HOST} [L,R=301]
    • 我尝试使用RewriteRule .* http://test.com/%{REQUEST_URI} [L,R=301] 进行调试,以确认最终的 REQUEST_URI 是什么。它向我显示 REQUEST_URI 是单个 /。我也尝试了你的方法RewriteCond %{REQUEST_URI} !^/index (只需匹配任何潜在的索引名称),它也不起作用。
    • 只要 Cond 指向正确的底层 URI,RewriteCond 和 RewriteRule 对就应该工作。如果您注释掉那些 Rewrites、退回 Apache 并再次点击您的站点名称会发生​​什么。浏览器中显示什么?查看您的 httpd.conf 并查看 DirectoryIndex 条目指向的内容。
    • 对不起,我以为这只是在主配置中。没有意识到这是在虚拟主机中,并且您的主页是在 .htaccess 中定义的。这可能会带来更多的范围和优先级问题……也可能不会。对其余配置了解不够。鉴于您已经解释过,请尝试将您的 php URI 插入条件: RewriteCond %{REQUEST_URI} !^/news/test.php 还请注意:您始终可以添加以下行以启用重写日志记录,并查看是否以及如何正在执行重写:RewriteLog logs/rewrite.log RewriteLogLevel 9
    猜你喜欢
    • 2020-02-09
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    相关资源
    最近更新 更多