2012-02-12 71 views
0

可能有人检查这个表达式我写的,它做什么,我想实现,但我不知道这是否是做了正确的方式,如果它不涨正则表达式在.htaccess结合两个消极条件

放缓的一切

这是它应该做的:

如果URL路径是不是只 ,如果它不包含字符串“/德”或“/ EN”开头 THEN 301它涉及的领域不再域只有

这就是我写的:

RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$ 
RewriteCond %{HTTP_HOST} ^(?!.*(/de|/en)) 
RewriteRule .* http://example.com/ [L,R=301] 

...有没有更好的方法来实现这一目标?

谢谢! 乌尔斯

+0

'URL路径比只有域更长'。你是什​​么意思?原因mod_rewrite无法检查文本长度。 – Gerben 2012-02-12 13:03:53

回答

2

我假设你做了一个“mindfart”,第二COND应该读%{REQUEST_URI}否则它没有任何意义,因为HTTP_HOST永远不会包括/

在运行时,它使得差异很小,但它是如果写成更容易理解

RewriteCond %{REQUEST_URI} !(/de|/en) 
+0

不介意,只是一无所知:-) – Urs 2012-02-13 21:23:58

+0

我再次反思我想做什么,它比我上面所描述的更简单:如果REQUEST_URI不以/ de或/ en开头,则在前面添加/ de的。你能帮我做到吗? (也可能指向我一个很好的mod_rewrite教程)? – Urs 2012-02-13 21:27:26

+0

在规则模式\中使用所谓的负向前瞻断言(\ [(http://www.regular-expressions.info/lookaround.html)\)。 'RewriteRule ^(?! de /)(?! en /).* - [L]'。 (在'.htaccess'文件中的规则模式中没有前导'/')。使用[这个脚本](http://stackoverflow.com/questions/9153262/tips-for-debugging-htaccess-rewrite-rules/9261963#9261963)来玩规则模式。至于教程,这就是所谓的Google。我在Google存在之前就知道他们了。大声笑。请享用!! – TerryE 2012-02-13 23:27:55