在使用通配符子域时,我遇到了与页面链接的麻烦,并希望能帮助您找到解决方案。
我希望用户拥有自己的子域来查看自己的网站内容,以便用户输入" user1.domain.com"服务器将有一个重写规则,将请求定向到根目录中的index.php页面。此index.php页面将用于所有子域,并将根据查询字符串中传递的子域提供数据库中的内容。
这部分工作得很好,它可以提供index.php中的内容。当index.php页面加载时,它包含一个菜单(HOME | RENTALS | CONTACT US)。当我点击菜单链接转到另一个页面时出现问题。 URL地址会更改,但页面内容不会更改。
以下是一个例子:如果我点击" RENTALS"我希望用户转到rental.php页面并显示" user1"子域名......但是这里发生了什么:
链接方案1:
<a href="http://user1.domain.com/rentals.php">RENTALS</a> --> URL address bar changes to "user1.domain.com/rentals.php" but the page doesn't change, it still stays on the index.php content
链接方案2:
< a href="rentals.php" >RENTALS< /a > --> URL address bar changes to "user1.domain.com/rentals.php" but the page doesn't change, it still stays on the index.php content
链接方案3(如果我对域进行硬编码并省略链接有效的通配符子域):
<a href="http://www.domain/public_site/rentals.php">RENTALS</a> --> URL address bar changes to "http://www.domain.com/public_site/rentals.php" AND IT WORKS, the rentals.php page loads and serves up the content.
方案3的问题是我想要的网址是:&#34; user1.domain.com/rentals.php"
我想知道这是否可以在重写条件下设置,但我无法弄清楚。
如果有人可以提供帮助,我将不胜感激!
这是我的目录结构:
ROOT
|
PUBLIC_SITE
|
index.php
rentals.php
contactus.php
这是apache重写规则(第一条规则有效。我添加的第二条规则希望解决我的问题,但它没有解决问题):
<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
####Rewrite subdomain request to public_site/index.php
RewriteCond %{HTTP_HOST} !www.domain.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com [NC]
RewriteRule ^(.*)$ /public_site/index.php?subdomain=%2 [L]
#### Rewrite rule for rentals.php page
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com/rentals.php [NC]
RewriteRule ^(.*)$ /public_site/rentals.php?s=%2 [L]
</IfModule>
答案 0 :(得分:0)
只需将此代码放在“主域”规则之前:
#### Rewrite rule for rentals.php page
RewriteCond %{REQUEST_URI} ^/rentals.php?$ [NC]
RewriteRule ^(.*)$ /public_site/rentals.php [L]