我已经拥有通配符子域名并且工作正常,现在我希望有朋友的URL来存放那个子域名中的内容,我的网站的结构是用户输入subdomain.maindomain.com和.htaccess重定向到
blogs/index.php?user=subdomain
其中blogs / index.php收到参数并显示正确的内容
现在我尝试制作像这样的网址功能
subdomain.maindoamin.com/24/title-of-content
然后.htaccess必须结果
blogs/index.php?id_content=24&title=title-of-content
我有下一个.htaccess
Options +FollowSymLinks
#this force to server the content always without www.
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [R=301]
#this is to pass the subdomain like param and show the right content of the user
RewriteCond %{HTTP_HOST} !^www\.misite\.com [NC]
RewriteCond %{HTTP_HOST} ^([a-z0-9]+)\.misite\.com
RewriteRule ^(.*)$ blogs/index.php?url=%1 [QSA,L]
#the next line i can't make work to make nice url
RewriteRule ^/(.*)/(.*)$ blogs/index.php?idP=$1&name=$2 [L]
无效,因为我在index.php中制作
echo $_SERVER['REQUEST_URI'];
不显示idP = 24 show / 24 / title-of-content我需要$ _GET(idP)
我真的对这些东西有所了解我不是htaccess的专家,先谢谢大家。
答案 0 :(得分:1)
有两个问题:
RewriteRule
的第一个参数与目录.htaccess
的斜杠之后和查询字符串之前的所有内容匹配。如果您的www-root中有.htaccess
,并且您获得了网址http://www.example.com/shiny/unicorns.php?are=shiny
,则会与shiny/unicorns.php
匹配。它永远不会以斜杠开头,因此^/
永远不会匹配。http://sub.example.com/10/unicorns
,则第二条规则将首先匹配,并将请求重写为/blogs/index.php?url=10/unicorns
。如果您删除了前导斜杠,则第三条规则将匹配,但通常您不会想要这样。您希望第三条规则仅匹配您想要移动第三条规则,这是第二条规则。您希望使其更具体,仅与子域匹配。您还知道第一部分仅包含数字,因此请使用该知识阻止blogs/index.php
匹配您的现在第二规则。您还需要阻止blogs / index.php匹配 now 第三条规则以防止它自身匹配。最后但并非最不重要的是,我从 now 第二条规则中删除了[L]
,因为第三条规则无论如何都会匹配。
#the next line i can't make work to make nice url
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^([0-9]+)/([^/]+)$ blogs/index.php?idP=$1&name=$2
#this is to pass the subdomain like param and show the right content of the user
RewriteCond %{HTTP_HOST} !^www\.misite\.com [NC]
RewriteCond %{HTTP_HOST} ^([a-z0-9]+)\.misite\.com
RewriteCond %{REQUEST_URI} !/blogs/index\.php
RewriteRule ^ blogs/index.php?url=%1 [QSA,L]