我有以下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 * 对于下面的所有RewriteRule/对于此RewriteRule,点表示a .而不是任何字符,因此点没有转义 * 的方法。
那么,有没有一种方法可以获得完全匹配的 /views/index.php 而不需要转义点?
3条答案
按热度按时间vfwfrxfs1#
正如Amal在您的问题下面评论的那样,regex中的点意味着任何字符,由于
RewriteRule
使用URI模式的正则表达式,因此您需要转义点,使其与文字点匹配。但是在
mod_rewrite
规则中,您可以使用RewriteCond
使其匹配文字字符串而不使用正则表达式在匹配模式之前使用=
符号:以下是已转换规则的示例:
qqrboqgw2#
是的,您可以匹配
/views/index.php
,而不会转义点。例如,可以使用
/views/index[.]php
,其中点位于字符类中。此外,许多正则表达式标记允许您匹配点,而不需要特别要求句点。
.
将匹配句点[[:punct:]]
将匹配句点\D
(不是数字)将匹配句点\S
(不是空白字符)将匹配句点(?![-/])[--/]
只匹配一个句点(这是一个基于ASCII table的小范围的特别反常的正则表达式)nnt7mjpx3#
与公认的答案不同,下面的解决方案对我很有效: