我有以下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 而无需转义点?
答案 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