与RewriteRule完全匹配,没有正则表达式

时间:2014-06-29 13:41:34

标签: regex apache .htaccess mod-rewrite

我有以下htacces来重写一个精确的URL(views / index.php到views / index.xml):

RewriteEngine On
RewriteRule ^/views/index\.php$ /views/index.xml [L]

很容易忘记\并输入^/views/index.php$,允许 / views / indexXphp / views / index / php 只有 /views/index.php

使用完全匹配而不是正则表达式对我的情况来说很好,所以这是一种告诉Apache 下面的所有RewriteRules /为此RewriteRule的方法,点表示a。没有任何字符,因此点不会被转义

那么,有没有办法让完全匹配 /views/index.php 而无需转义点?

3 个答案:

答案 0 :(得分:4)

正如Amal在你的问题下面评论的那样,正则表达式中的点表示任何字符,并且因为RewriteRule使用正则表达式来表示URI模式,因此您需要转义点以使其与文字点匹配。

但是,在mod_rewrite规则中,您可以使用RewriteCond在匹配patten之前使用=符号使文字字符串与正则表达式匹配:< / p>

以下是您翻译规则的示例:

RewriteCond %{REQUEST_URI} =/views/index.php
RewriteRule ^ /views/index.xml [L]

答案 1 :(得分:0)

是的,你可以匹配/views/index.php而不必转义点。

例如,您可以使用/views/index[.]php,其中点位于字符类中。

此外,许多正则表达式令牌允许您匹配点,而无需特别要求句点。例如,

  • .会匹配一段时间
  • [[:punct:]]会匹配一段时间
  • \D(不是数字)会匹配一段时间
  • \S(不是空格字符)会匹配句号
  • (?![-/])[--/] 匹配一段时间(这是一个特别反常的正则表达式,基于ASCII table的一小部分)

答案 2 :(得分:0)

与接受的答案不同,以下解决方案对我有效:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(source)$
RewriteRule ^(.*)$ destination [R=301,L]

信用:https://community.webfaction.com/questions/12887/apache-rewrite-to-match-an-exact-string