重写规则以从URI中删除所有非字母数字符号

重写规则以从URI中删除所有非字母数字符号

问题描述:

我无法在SO上找到完全相同的问题。我希望有人能帮助我解决这个问题。重写规则以从URI中删除所有非字母数字符号

说,用户输入http://www.example.com/abc#!def,我想要做的是删除${REQUEST_URI}部分中的所有符号,然后重定向到http://www.example.com/abcdef。问题是这些符号可能出现在字符串的任何地方,例如#ab!cdegabcdef#!都应该重定向到abcdef

如果我是正确的,mod_rewrite没有字符串替换功能,所以这似乎是不可能的,但我是正确的吗?

+0

我相信你是正确的 - 你需要将这个URI传递给脚本进行进一步处理,然后将结果传递给301重定向。 – 2013-03-18 05:34:16

+0

@MikeAnthony,等等,我认为这是可能的。我可以使用N标志。没有? http://httpd.apache.org/docs/current/rewrite/flags.html#flag_n – CookieMonster 2013-03-18 09:29:41

+0

我没有测试过,但我认为它可以工作。这似乎很合理......让我们看看它是否有效。 – 2013-03-18 12:34:04

您可以使用RewriteCondRewriteRule中的regular expressions捕获URL的特定部分,但不能删除任意字符。

此外,您永远不会在网址中看到hash character '#'及其后的所有内容,因为它被客户端用于导航到文档的特定部分。使用

更新next标志:

RewriteRule (.*)[^a-zA-Z](.*) $1$2 [N] 

该规则可删除所有字符,这是不^字母。

+0

嗨,谢谢你的回答。我想我可以使用N标志(请参阅[这里](http://httpd.apache.org/docs/current/rewrite/flags.html#flag_n))。我会捣鼓它,让你知道。同时,如果有人已经知道它的工作原理,请告诉我们。尽管在PHP中使用它可能会更快。我听说.htaccess速度很慢,如果可能,应该避免使用它。 – CookieMonster 2013-03-18 09:37:42

+0

@CookieMonster这是一个好主意,我没有想到这一点。请参阅最新的答案。 – 2013-03-18 09:43:11

+0

嗯,奇怪。我尝试过你的例子,也是Apache文档中显示的那个例子,即ewriteRule(。*)A(。*)$ 1B $ 2 [N],但它们都不起作用。这可能是由于我的服务器设置...?我使用运行Apache 2.4.3的Linux 1.8.1的XAMPP。 – CookieMonster 2013-03-19 04:22:11