有人可以帮忙尝试使用 mod rewrite 以便foo.domain.com
将其重写为domain.com/p.php?s=foo
和foo.domain.com/bar
吗domain.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]