基本的.htaccess mod_rewrite。 (更明确)

时间:2009-03-08 17:55:27

标签: php regex apache .htaccess

继续previous question

我被告知要使用

RewriteRule ^error/(.*) index.php?error=$1 [L]
RewriteRule ^file/(.*) index.php?file=$1 [L]

RewriteCond %{HTTP_HOST} !^www\.mysite\.com$ [NC]

之前,但它并没有真正帮助我。

我正在使用通配符子域,我该怎么做这个条件:

RewriteCond %{HTTP_HOST} !^www\.mysite\.com$ [NC]

动态,就好像它是任何子域名(除了www。)所以我需要改变什么。

4 个答案:

答案 0 :(得分:0)

我不确定我理解你的问题,但可能有助于回忆起RewriteCond的第二个版本是一个正则表达式,所以你可以这样写:

RewriteCond %{HTTP_HOST} ^[a-z]+\.mysite\.com$ [NC]

至于排除www,你可以链接规则(它们是一起的),或者用你的正则表达式来表达。我建议前者,因为它通常更容易遵循。

答案 1 :(得分:0)

我认为你不理解Gumbo's advice。我把它包括在这里:

# stop rewriting for the host names example.com and www.example.com
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule ^ - [L]

RewriteRule ^error/(.*) index.php?error=$1 [L]
RewriteRule ^file/(.*) index.php?file=$1 [L]

这专门针对www.example.com和example.com执行不重写。如果我们在 example.com的任何其他子域中,则错误/和文件/重写将适用。

如果你想反转测试,可以这样做:

RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$
RewriteRule ^error/(.*) index.php?error=$1 [L]

RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$
RewriteRule ^file/(.*) index.php?file=$1 [L]

答案 2 :(得分:0)

我使用了php并为我的框架创建了一个系统,我认为它在很多方面都更加高效和安全,但非常感谢您的建议!

:< 3

答案 3 :(得分:0)

这让我摆脱了构建复杂正则表达式的类似情况,它也可以帮助你。

http://www.addedbytes.com/apache/mod_rewrite-cheat-sheet/