我正在使用 mod_rewrite 搜索引擎友好的 URL。我有这条线很好用:
RewriteRule ^Pay ./pay.php [L] #Pay
http://example.com/pay
但如果访客类型(注意小写),我也想匹配。我尝试过使用NC
,但出现 500 错误。我尝试制定 2 个单独的规则,一个大写一个小写,但又出现 500 错误。
这可以使用正则表达式在一行上完成吗?就像是:
RewriteRule ^([P-p])ay ./pay.php [L] #Pay
如果是这样,正确的方法是什么?如果不是,我怎么能在不使用 mod_spelling 的情况下做到这一点?
由于无限的重写循环,您会收到 500 错误。如果您只是使上述不区分大小写,那么重写的 URL 即。
/pay.php
匹配现在不区分大小写的模式^Pay
等。在这种情况下,您可以简单地使您的模式更具限制性并仅匹配“pay”,而不是任何简单地以“pay”开头的 URL 路径。例如:
我还删除了susbstitution
./
上的前缀,这不是必需的。此外,Apache 不支持行尾注释。但是请注意,在使这种重写不区分大小写时,它可能会导致重复的内容。
我不知道一个简单的不区分大小写的重写规则,但是您尝试匹配 P 或 p 非常接近正确。只需省略破折号和括号 - 它可以工作。这是我为您测试的(尽可能简单):
方括号中的字符只是 1 个字符的替代品,所以
将匹配小写和大写的任何组合。不过,我不确定为什么您的版本不起作用,因为它的意思是“匹配 P 和 p 之间的任何字符”,应该是 P,Q,R,...Z,some-punktuation,a,b ,c...p。我没有测试你的版本。
方括号 () 不应该造成任何伤害,它们只是表示“提取您在其中找到的任何内容,并使其在替换字符串中作为 '$1' 可访问”。
建议:尝试使用静态文件。使用一些虚拟内容创建 test.html(例如“这是 test.html”),尝试通过您正在测试的 Web 服务器使用浏览器访问它。然后添加规则
并访问 best.html - 你应该看到 test.html。不断更改重写规则的一小部分,直到找到出错的部分。