Htaccess - 检测URL

时间:2014-05-30 07:30:38

标签: .htaccess mod-rewrite

对于我的家人,我给每个人都有自己的子域名 (sister1.mydomain.com,sister2.mydomain.com等......)

我使用PHP来检测域,然后我动态地加载与子域相关的信息。

我想摆脱子域名并使用.htaccess的力量 我的目标是提供相同的网址:

  

www.mydomain.com/sister1

     

www.mydomain.com/sister2

     

www.mydomain.com/mommy

     

www.mydomain.com/daddyo

显然,我并不打算为每个人提供文字工作目录。 我通过了'姐妹1"部分到process.php脚本,负责其余部分。

我通过在htaccess文件中手动输入每个RewriteRule来弄清楚如何操作:

Options +FollowSymLinks 
AddDefaultCharset UTF-8
RewriteEngine on
RewriteBase /

RewriteRule ^/?sister1$ process.php?entity=sister1 [L]
RewriteRule ^/?sister2$ process.php?entity=sister2[L]
RewriteRule ^/?mommy$ process.php?entity=mommy[L]
RewriteRule ^/?daddyo$ process.php?entity=daddyo[L]

我觉得这是做得很好的漫长道路。 是否有更通用的方法在第一个" /"之后提取文本? forwardslash,并将其传递给process.php?entity = $ 1?

我试过这种方式:

  

RewriteRule ^ /([A-Za-z0-9 - ] +)/?$ process.php?entity = $ 1 [NC,L]

我收到了apache 404错误:" Not Found"。

1 个答案:

答案 0 :(得分:1)

这是因为您在规则开头有强制性/,即您始终在网址中寻找/sibling之类的内容。您的第一个示例将第一个正斜杠作为可选项,因为它后面有问号。

你不需要一个开头的正斜杠 - 通常重写规则会在域名之后选择东西

www.example.com/string/mod/rewrite/gets/is.here

所以只需删除起始斜杠即可。