2014-01-15 60 views
2

有没有更有效的方法来做到这一点?htaccess用连字符替换下划线

最后/(.*)$是我不喜欢使用的ID。只有在它之前。

RewriteRule ^about-us/news-room/(.*)_(.*)_(.*)_(.*)_(.*)_(.*)_(.*)_(.*)_(.*)_(.*)/(.*)$ index.php?go=/news/press-releases/$1-$2-$3-$4-$5-$6-$7-$8-$9-$10 [NC] 
RewriteRule ^about-us/news-room/(.*)_(.*)_(.*)_(.*)_(.*)_(.*)_(.*)_(.*)_(.*)/(.*)$ index.php?go=/news/press-releases/$1-$2-$3-$4-$5-$6-$7-$8-$9 [NC] 
RewriteRule ^about-us/news-room/(.*)_(.*)_(.*)_(.*)_(.*)_(.*)_(.*)_(.*)/(.*)$ index.php?go=/news/press-releases/$1-$2-$3-$4-$5-$6-$7-$8 [NC] 
RewriteRule ^about-us/news-room/(.*)_(.*)_(.*)_(.*)_(.*)_(.*)_(.*)/(.*)$ index.php?go=/news/press-releases/$1-$2-$3-$4-$5-$6-$7 [NC] 
RewriteRule ^about-us/news-room/(.*)_(.*)_(.*)_(.*)_(.*)_(.*)/(.*)$ index.php?go=/news/press-releases/$1-$2-$3-$4-$5-$6 [NC] 
RewriteRule ^about-us/news-room/(.*)_(.*)_(.*)_(.*)_(.*)/(.*)$ index.php?go=/news/press-releases/$1-$2-$3-$4-$5 [NC] 
RewriteRule ^about-us/news-room/(.*)_(.*)_(.*)_(.*)/(.*)$ index.php?go=/news/press-releases/$1-$2-$3-$4 [NC] 
RewriteRule ^about-us/news-room/(.*)_(.*)_(.*)/(.*)$ index.php?go=/news/press-releases/$1-$2-$3 [NC] 
RewriteRule ^about-us/news-room/(.*)_(.*)/(.*)$ index.php?go=/news/press-releases/$1-$2 [NC] 

我在网上发现了一些解决方案,但似乎对使用[N]标志感到困惑呢?这里不太确定。任何人都可以解释一个更好的方法来做到这一点吗?

回答

1

你可以让重写引擎循环在内部为此:

RewriteRule ^about-us/news-room/(.+)/(.*)$ index.php?go=/news/press-releases/$1 [L,NC] 

RewriteCond %{QUERY_STRING} ^go=/news/press-releases/(.*)_(.*)$ 
RewriteRule ^index\.php$ /index.php?go=/news/press-releases/%1-%2 [L] 

的第一条规则发送到index.php请求,第二条规则将删除下划线和破折号替换它们。由于重写引擎循环,它将继续应用规则,直到达到递归限制或所有下划线消失。

+0

我绝对想知道它是如何循环的,因为我做的所有其他尝试都是让我的Web服务器崩溃。现在我看到规则是如何建立的,条件是如何设定的。谢谢你很好的回答。 – Paul