有条件地重写包含感叹号的URL!

时间:2011-07-12 15:45:27

标签: apache .htaccess mod-rewrite

两个

domain.com/blog/post/2011/01/25/This-Is-The-Post-Title!.aspx
domain.com/blog/post/2011/01/25/This-Is-The-Post-Title.aspx

需要重定向到

domain.com/blog/2011/01/25/this-is-the-post-title

以下规则适用于没有感叹号的网址,但我似乎无法获得删除条件的条件!来自网址(如果存在的话)。

RewriteRule ^blog/post(.*).aspx$ /blog${lc:$1} [R=301,L]

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在规则之前添加此行:

RewriteRule (.*)!(.*) $1$2 [N,DPI]

这将删除URL中的所有 !字符(仅限路径部分,查询字符串不受影响)。您可以将其修改为仅适用于博客文章标题 - 由您决定。

小心但是 - 它使用[N]标志,这会导致Apache从最顶层的规则再次开始重写,以便删除所有出现,否则只会替换第一次出现(如果有的话)不止一个!)。因此,我建议将此规则放在顶部的

[N]标志的替代方案是拥有此标准但没有此标记但会多次出现。

http://httpd.apache.org/docs/current/rewrite/flags.html#flag_n

答案 1 :(得分:0)

我能够利用 LazyOne 的答案并最终得到这个:

RewriteEngine On
RewriteRule (.*)!(.*) $1$2 [N,DPI,E=ep:yes]
RewriteCond %{ENV:ep} ^yes$
RewriteRule (.*) https://test.com/$1 [R=301,L]

完美运行!