子域使用Mod_Rewrite转发到URL?

时间:2012-01-07 02:53:44

标签: .htaccess mod-rewrite subdomain http-status-code-403

我目前正在使用mod_rewrite,但希望使用特定的URL路径来使用子域名。这可以用mod_rewrite吗?

目前,网址如下:

http://domain.com/index.php?wiki/index/ -> http://domain.com/forum/wiki

如何获取网址

http://wiki.domain.com/forum/ 

当wiki目录不存在时?由于目录不存在,我不断收到403,因此禁止使用。我目前有:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^wiki.domain.com$ [OR]
RewriteCond %{HTTP_HOST} ^wiki.domain.com$
RewriteRule ^(.*)$ http://domain.com/wiki/index[R=301,L]

2 个答案:

答案 0 :(得分:1)

这是一个基于mod_rewrite的解决方案,只需将这些行放在.htaccess文件中:

Options +FollowSymLinks -MultiViews
RewriteEngine on

RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^forum/wiki/?$ http://wiki.domain.com/forum/ [R=301,L,NC]

这会将http://domain.com/forum/wiki重定向到http://wiki.domain.com/forum/

答案 1 :(得分:0)

以下是提示:您实际上不需要进行重定向

只需要一个 vhost来处理这两个域。

只需进行内部重写即可。

这是我自己的vhost(处理domain.com和所有*.domain.com )和你想要的东西的混合(这可能无法100%工作但是我嘿我给你有两个暗示):

<VirtualHost *>

    ServerAdmin webmaster@domain.fr
    DocumentRoot "/web/htdocs/domain/prod/website"

    ServerName domain.com
    ServerAlias *.domain.com
    ErrorLog "/web/logs/domain.error.log"
    CustomLog "|/opt/httpd/bin/rotatelogs /web/logs/domain/access_log.%Y-%m-%d-%H_%M_%S.log 5M" combined

    # your RewriteRules ()
    RewriteEngine On

    # Trace:
    # (!) file gets big quickly, remove in prod environments:
    RewriteLog "/web/logs/domain.rewrite.log"
    RewriteLogLevel 9

    # Your RewriteRules ()
    RewriteCond %{HTTP_HOST} ^wiki.domain.com$
    RewriteRule ^/forum/(.*) /wiki/index.php?wiki/index$1 [QSA,L]

</VirtualHost>

两个提示:

如果您不在托管环境中(=如果它是您自己的服务器并且您可以修改虚拟主机,而不仅仅是.htaccess文件),请尝试使用RewriteLog指令:它帮助您追踪此类问题:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

我最喜欢检查regexp的工具:

http://www.quanetic.com/Regex(别忘了选择ereg(POSIX)而不是preg(PCRE)!)

相关问题