【问题标题】:Using mod-rewrite with multiple pages对多个页面使用 mod-rewrite
【发布时间】:2013-02-11 13:20:46
【问题描述】:

简化问题

我使用这个 .htaccess 代码将 domain.com/folder/client.php?id=1 更改为 1.domain.com

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([^.]+).domain.com$ [NC]
RewriteRule ^$ /client.php?id=%2 [QSA,NC]

现在我想将domain.com/folder/about.php?id=1 更改为1.domain.com/about

有可能吗?还是有其他方法可以做到这一点?

谢谢你:D


老问题

在我的目录中,我有 2 页(client.phpabout.php)。我已经为页面目录设置了一个通配符子域,并将domain.com/folder/client.php?id=1 更改为1.domain.com。这是我的 .htaccess 代码:

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([^.]+).domain.com$ [NC]
RewriteRule ^$ /client.php?id=%2 [QSA,NC]

现在,我需要添加另一个页面。因此,在 client.php 页面中,有一个按钮可以转到同一目录中的 about.php 页面。我尝试了 1.domain.com/about.php 但它不起作用。

我必须创建另一行 RewriteCond 吗?还是有其他方法可以做到这一点?

非常感谢:D


没有工作ID的更新代码

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{HTTP_HOST} !^www.domain.com$             [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([^.]+).domain.com$   [NC]
RewriteCond %{REQUEST_URI} !^/about                    [NC]
RewriteRule ^$ /client.php?id=%2                   [QSA,NC]

RewriteBase /
RewriteCond %{HTTP_HOST} !^www.domain.com$                [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?([^.]+)\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} ^/about                        [NC]
RewriteCond %{REQUEST_URI} !about\.php                    [NC]
RewriteRule . /about.php?id=%1                            [L,QSA]

**代码解析了 url 框中的文本。假设id=1。现在它显示 1.domain.com/about。

the php code : `$_GET["id"]` is not specified.**

感谢 faa 的编辑:D


完整的解决方案

参考Using mod-Rewrite with 5 pages (wildcard sub-domain)

【问题讨论】:

  • 一般来说,about.php 或任何文件名是 URL 路径的一部分,而不是主机名的一部分。所以,是的,您至少需要另一个条件指令来测试并最终捕获该字符串。不能说更多,因为:in client.php page, there's a button to go to about.php page 对理解您的需求没有多大帮助。至少对我来说。
  • 现在,在主页上,我的链接是<a href="1.domain.com">,这意味着它将转到domain.com/folder/client.php?id=1。现在从1.domain.com 表示domain.com/folder/client.php?id=1,我想转到domain.com/folder/about.php?id=1。在client.php页面中,如果我写另一个相同的条件,链接到about.php <a href的按钮将如何?
  • 我已经编辑了问题以使其更清晰。谢谢:D

标签: php mod-rewrite subdomain wildcard


【解决方案1】:

你可以试试这个:

Options +FollowSymLinks
RewriteEngine on

## This is the actual rule-set that works as it is according to the OP
RewriteCond %{HTTP_HOST} !^www.domain.com$             [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([^.]+).domain.com$   [NC]
# Added to exclude folder `/about`
RewriteCond %{REQUEST_URI} !^/about                    [NC]
RewriteRule ^$ /client.php?id=%2                       [L,QSA,NC]

## This is the additional rule set
RewriteBase /
RewriteCond %{HTTP_HOST} !^www.domain.com$             [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?([^.]+)\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} ^/about                     [NC]
RewriteCond %{REQUEST_URI} !about\.php                 [NC]
RewriteRule . http://domain.com/folder/about.php?id=%1 [L,QSA]

静默地图

http://N.domain.com/about 带或不带斜杠

收件人:

http://domain.com/folder/about.php?id=N

对于永久且可见的重定向,请将[L,QSA] 替换为[L,R=301,QSA]

【讨论】:

  • 是的,感谢代码有效,但未设置 ID。它也更改为http://domain.com/folder/about.php?id=。我期望的是网址框中的http://N.domain.com/about。它转到关于页面,它变成了这样http://domain.com/folder/about.php?id=。非常感谢:D。如果我有另一个页面怎么办?
  • 我认为它终于奏效了。好的,现在传入和重定向的 URL 就像我的回答中的那些,你说 "What I expect is http://N.domain.com/about in the url box. it goes to the about page and it became like this http://domain.com/folder/about.php?id="。但这正是我回答中最后一个规则集所做的,我认为。我因为得不到而错过了什么?
  • 感谢您的回复:D。假设id1。使用书面代码后的当前问题是id为空。它应该是1.domain.com/about,但它显示的是http://domain.com/folder/about.php?id=。同样,?id= 是空的。
  • 好的。我明白。我看不出有什么问题,它在我的多个服务器中都能完美运行。但是,让我们看看。完整的测试 URL 是这样的:http://1.domain.com/about 还是有其他内容?原始规则是否将 ID 传递给client.php?我在回答中漏掉了一些缺少的句点,您可以再试一次。
  • 我已经编辑了这个问题。现在http://1.domain.com/about 工作了,谢谢。但是有一个问题,我已经在新编辑的问题中指定了它。谢谢:D
猜你喜欢
  • 2013-12-06
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多