所以,我有以下RegEx ..
RewriteRule ^([-a-z0-9]*[A-Z\.]+.*)$ file.php?string=$1 [QSA]
我希望file.php
触发的网址必须包含大写字母或句点,然后将网址发送到PHP脚本。
但是,我遇到的问题是此脚本会在任何网址上触发,因为期间未真正转义。
我尝试用反斜杠或两个反斜杠或三个反转来逃避这段时间......但是没有一个停止一般解释。
我做错了什么?
编辑:举个例子,
RewriteRule ^([-a-z0-9]*[A-Z\\.]+[-a-z0-9\/]*)$ file.php?string=$1 [QSA]
不起作用,但是
RewriteRule ^([-a-z0-9]*\\.+[-a-z0-9\/]*)$ file.php?string=$1 [QSA]
确实逃脱了它。
编辑2 :我要重定向的网址示例:
我没有:
编辑3:旧正则表达式是:
RewriteRule ^([-a-z0-9]*[A-Z\.]+[-a-z0-9\/]*)$ file.php?string=$1 [QSA]
但在撰写帖子时,我将问题的正则表达式更新为您在上面看到的内容。
答案 0 :(得分:1)
尝试:
RewriteCond %{REQUEST_URI} [A-Z] [OR]
RewriteCond %{REQUEST_URI} \.html$
RewriteRule (.*) file.php?string=$1 [QSA]
使用mod_rewrite并且您要匹配多个网址时,最好使用RewriteCond
过滤然后应用RewriteRule
。
答案 1 :(得分:1)
我不认为你的问题可能是你的想法:字符类中的句点应该是字面句,而不是“任何字符”。如果这真的 问题,不知何故,那么您可以将[A-Z\.]+
更改为([A-Z]|\.)+
;但我对此表示怀疑。有些事要尝试:
QSA
更改为QSA,R
来实现真正的HTTP重定向,会发生什么?目标网址是否与您期望的一样?也许有一些意想不到的句号或大写字母? (警告:如果您在浏览器中尝试,这很可能会触发无限重定向循环;尝试通过端口-80 Telnet提交请求并查看实际的HTTP响应可能会更容易。)此外,您的规则与您描述的方式不完全一致。例如,您的规则与a.b.c
之类的网址不匹配,因为您只在单个“clump”中出现大写字母和/或点;如果它们被小写字母分隔,则不会发生匹配。这只是因为你不想让描述过于复杂吗?