1

我有一个包含多个域的站点,例如sub1.mydomain.org, sub2.mydomain.org

目前我有这个 htaccess 代码将所有这些子域重定向到 index.php 并将子域名作为变量传递:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ http://mydomain.org/index.php?subdomain=$1 [QSA,L]

一切正常,除了 URL 地址更改为mydomain.org/index.php?subdomain=(sub accessed).

我想保持显示子域名。我怎样才能做到这一点?

我的共享主机站点的结构为

/username/public_html/addon-domain/index.php
/username/public_html/addon-domain/subdomains
/username/public_html/addon-domain/subdomains/sub1
/username/public_html/addon-domain/subdomains/sub2...

上面的 htaccess 文件在subdomains目录中。

编辑: ----- 上述问题已解决,但新情况已出现 -----

我的 HTACCESS 代码的问题是我使用了绝对路径 (http://www.mydomain...),这将始终导致显示新的 url,无论 [R] 与否。相反,您应该使用相对路径。但是,仍然存在一个令人困惑的问题。这是新代码:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.org$
RewriteRule ^(.*)$ (can't use relative here) [QSA,L]
RewriteRule ^(.*)$ \.\./index.php?subdomain=$1 [QSA,L]

第一个条件/规则将检查我的站点是否正在从子域访问,例如 sub.mydomain.org。如果它是真的,[L] 将停止第二个重写器运行。第二个重写器使用来自位于 /subdomains/ 文件夹中的 HTACCESS 文件的相对路径,如果我从 mydomain.org/subdomains/anysub 进入我的站点,一切正常。

但是,如果站点输入为 anysub.domain.org,则相对路径不起作用。它将触发两个错误:“内部服务器错误。服务器遇到内部错误或配置错误,无法完成您的请求。” 和“此外,在尝试使用 ErrorDocument 处理请求时遇到 500 Internal Server Error 错误。”

任何人都会碰巧知道为什么?相对路径不应该总是与 HTACCESS 文件所在的位置相关吗?

编辑:刚刚发现 mydomain/subdomains/anysub/ 有效,但 mydomain/subdomains/anysub (不以 / 结尾)将再次触发显示 get var。开始认为这太复杂了,无法得到答案

4

1 回答 1

0

尝试P在 的括号中添加一个标志RewriteRule

RewriteRule ^(.*)$ http://mydomain.org/index.php?subdomain=$1 [P,QSA,L]
于 2012-07-12T05:06:12.033 回答