使用 5 个页面的 mod-Rewrite(通配符子域)

Posted

技术标签:

【中文标题】使用 5 个页面的 mod-Rewrite(通配符子域)【英文标题】:Using mod-Rewrite with 5 pages (wildcard sub-domain) 【发布时间】:2013-01-30 00:56:45 【问题描述】:

假设我有 5 页(index.phpabout.phpportfolio.phpgallery.phpcontact.php)。

假设 id 是1

原来的网址是:

www.domain.com/folder/index.php?id=1, www.domain.com/folder/about.php?id=1 等等……

现在,我想把它改成:

1.domain.com/index, 1.domain.com/about, 1.domain.com/portfolio, 1.domain.com/gallery, 1.domain.com/contact

是否可以使用 mod-rewrite ?如果我在index.php 页面中,如果可以进行mod-rewrite,<a href="" > 是什么about.php

非常感谢 :D 非常感谢你的帮助 :D

编辑

还有一件事,我的通配符子域文件夹是public_html/folder/

Anubhava的解决方案

使用子域代码编辑:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

# EDIT BY ANUBHAVA: to make http://1.domain.com/ load /about as default page
# Replace /about with any other page you want as default page
RewriteCond %HTTP_HOST ^1\.(domain\.com$ [NC]
RewriteRule ^$ /about [L]

RewriteCond %HTTP_HOST !^www.domain.com$ [NC]
RewriteCond %HTTP_HOST ^(www.)?([^.]+).domain.com$ [NC]
RewriteRule ^(index|about|portfolio|gallery|contact)/?$ /$1.php?id=%2 [L,NC,QSA]

确保您的通配符子域目录是页面所在的位置。还将您的 .htaccess 文件放在页面所在的目录中。

【问题讨论】:

【参考方案1】:

通过httpd.conf启用mod_rewrite和.htaccess,然后把这段代码放到你.htaccessDOCUMENT_ROOT目录下:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# EDIT: to make http://1.domain.com/ load /about
RewriteCond %HTTP_HOST ^1\.(domain\.com$ [NC]
RewriteRule ^$ /about [L]

RewriteCond %HTTP_HOST ^1\.(domain\.com$ [NC]
RewriteRule ^(index|about|portfolio|gallery|contact)/?$ http://www.%1/folder/$1.php?id=1 [R=302,L,NC,QSA]

一旦到位,请创建这样的 href 链接:

<a href="http://1.domain.com/about">About Us</a><a href="http://1.domain.com/contact">Contact Us</a>

【讨论】:

id变了怎么办?假设它更改为2。以及如何重写子域1.domain.com?感谢您的回答:D 哦,没有意识到您想要在1.domain.com 中重写 URL,现在查看编辑后的答案。如果您的 id 发生变化,那么您只需要在 RewriteRule 行上方进行更改。 它可以工作,但是如果用户只是在浏览器 url 框中输入http://www.1.domain.com,如何使about.php 成为默认登录页面?非常感谢,不知道它只需要 6 行代码就可以工作:D。再次感谢。但是你能帮我设置默认登陆页面吗:D 要将/1.domain.com/about设为默认页面,您可以使用我上面编辑部分的代码。 抱歉,我找不到是哪一个。我仍然是 mod-rewrite 的新手:D【参考方案2】:

您需要更改 .htaccess 文件。编写下面的代码,它将隐藏文件的扩展名。

   Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^([a-zA-Z])\$ $1.php [NC]

然后,您将在锚链接中提供 URL,例如 /index 等。

干杯。

【讨论】:

谢谢,我现在试试,子域1.domain.com怎么样?

以上是关于使用 5 个页面的 mod-Rewrite(通配符子域)的主要内容,如果未能解决你的问题,请参考以下文章

codeigniter中的mod-rewrite问题

405使用mod-rewrite对PHP脚本的PUT请求出错

mod-rewrite递归循环

我的脚本的通用 mod-rewrite htaccess 文件

Day-5:通配符过滤

Apache Mod-Rewrite 规则跳过子目录