Mod Rewrite具有多个参数

时间:2012-11-02 12:34:36

标签: apache .htaccess mod-rewrite

我正在尝试设置重写规则,以便代替子域的任何文本都是参数1,第一个正斜杠之后的任何文本都是参数2,但我正在努力使用正则表达式并且不确定重写术语

例如,如果有人要求:

joebloggs.mydomain.com

我希望他们看到:

mydomain.com/index.php?site=joebloggs

此外,如果有人要求:

joebloggs.mydomain.com/contact

我希望他们看到:

mydomain.com/index.php?site=joebloggs&page=contact

通过“看”我的意思是看页面,而不是看到网址 - 这是一个类似CMS的项目,所以你可能会看到我的目标。另外,我已经找到了如何删除www。所以这不是问题:)


修改

目前.htaccess是:

RewriteEngine On

# Remove trailing slash
RewriteRule ^(.+)/$ $1 [L]

# Remove www
RewriteCond %{HTTP_HOST} ^www.richardmjenkins.com$ [NC]
RewriteRule ^(.*)$ http://richardmjenkins.com/$1 [R=301,L]

# Rewrite for site/page pair
RewriteCond %{HTTP_HOST} ^(.*)\.richardmjenkins\.com$ [NC]
RewriteCond %{REQUEST_URI} !p.php
RewriteRule ^(.+/)?([^/]*)$ p.php?s=%1&p=$2 [QSA,L,NC]

RewriteCond %{HTTP_HOST} ^(.*)\.richardmjenkins\.com$ [NC]
RewriteCond %{REQUEST_URI} !p.php
RewriteRule ^$ p.php?s=%1 [QSA,L,NC]

2 个答案:

答案 0 :(得分:0)

1。在您的主机面板中:添加名称为*的子域,以启用所有子域

2。这是您的htaccess代码:

RewriteEngine On
Options +Followsymlinks

RewriteCond %{HTTP_HOST} ^(.*)\.mydomain\.com$ [NC]
RewriteRule ^$ index.php?site=%1 [QSA,L,NC]

RewriteCond %{HTTP_HOST} ^(.*)\.mydomain\.com$ [NC]
RewriteRule ^([^/]+)/?$ index.php?site=%1&page=$1 [QSA,L,NC]

答案 1 :(得分:0)

通过httpd.conf启用mod_rewrite和.htaccess,然后将此代码放在.htaccess目录下的DOCUMENT_ROOT中:

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

RewriteCond %{HTTP_HOST} ^((?!www)[^.]+)\.(mydomain\.com)$ [NC]
RewriteRule ^$ index.php?site=%1 [L,QSA]

RewriteCond %{HTTP_HOST} ^((?!www)[^.]+)\.(mydomain\.com)$ [NC]
RewriteRule ^(.+)$ index.php?site=%1&page=%2 [L,QSA]