使用虚假子域名和多个变量进行 URI 重写

使用虚假子域名和多个变量进行 URI 重写

有人可以帮忙尝试使用 mod rewrite 以便foo.domain.com将其重写为domain.com/p.php?s=foofoo.domain.com/bardomain.com/p.php?s=foo&p=bar

目前我的.htaccess是:

RewriteEngine On

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

# Rewrite subdomain etc.
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteRule ^([^/]+)/?$ p.php?s=%1&p=$2 [QSA,L,NC]

但是我不知道如何获取第二个变量(可选,位于 URI 末尾的斜杠后面)。我尝试将条件的结尾改为?/(.*)$,但无济于事,而且我的 mod 重写技巧肯定很差!

答案1

这样可以停止奇怪的重定向,但不会从 URI 中删除斜线(我从 SEO 的角度考虑,重复内容的多个 URI 是不好的 :) )这需要重定向吗?我尝试添加 R=301 标志,但没有用。有什么想法吗?

(抱歉添加答案,“添加评论”按钮实际上已经消失了!)

答案2

p如果在 URL 部分为空的情况下获取参数为空是可以的,则应该执行以下操作:

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

如果您想完全忽略p直接访问 foo.domain.com 的情况,您需要在上述规则中添加针对这种情况的特殊规则,即匹配空 URL - 如下所示:

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

相关内容