【问题标题】:.htaccess mod_rewrite based on domain.htaccess mod_rewrite 基于域
【发布时间】:2013-03-25 16:46:14
【问题描述】:

我的 htaccess 中有以下规则,我需要对其进行修改以将变量添加到重新编写的 url 的末尾。基本上我有两个指向同一个主机的域,我根据它使用的域显示不同的站点。

RewriteCond %{HTTP_HOST} ^(www\.)?rrr\.me 
RewriteCond %{REQUEST_URI} !^/rrr
Rewriterule ^(.*)$ /rrr/$1 [L]

如果有人访问rrr.mewww.rrr.me,他们会在我网站的 rrr 目录中获得 index.php。这很好用!

我现在需要能够向 index.php 添加一个变量。所以有人会输入rrr.me/abc,它会以这种方式将abc附加到index.php的末尾index.php?var1=abc

根据 Olaf Dietsche 的意见改写新规则。

RewriteCond %{HTTP_HOST} ^(www\.)?rrr\.me 
RewriteCond %{REQUEST_URI} !^/rrr
RewriteCond %{REQUEST_URI} !/assets/
Rewriterule ^.*$ /rrr/index.php?rrr=$0 [L]

RewriteCond %{HTTP_HOST} ^(www\.)?rrr\.me
RewriteCond %{REQUEST_URI} !^/rrr
Rewriterule ^assets/.*$ /rrr/$0 [L]

【问题讨论】:

  • 我修改了最终规则。 !assets 条件必须添加到 first 规则中,并且第二条规则也必须具有 !rrr 规则。希望对您有所帮助。
  • 看准了!感谢所有的帮助,真的很感激。我也学到了很多:-)

标签: apache .htaccess mod-rewrite


【解决方案1】:

将请求的 URL 附加为查询字符串

Rewriterule ^.*$ /rrr/index.php?var1=$0 [L]

要排除assets 目录,您必须使用额外的RewriteCond

RewriteCond %{HTTP_HOST} ^(www\.)?rrr\.me
RewriteCond %{REQUEST_URI} !^/rrr
RewriteCond %{REQUEST_URI} !/assets/
Rewriterule ^(.*)$ /rrr/$1 [L]

对于资产文件,您可以使用类似的重定向

RewriteCond %{HTTP_HOST} ^(www\.)?rrr\.me
RewriteCond %{REQUEST_URI} !^/rrr
Rewriterule ^assets/.*$ /rrr/$0 [L]

【讨论】:

  • 谢谢。我用你的行替换了我的规则的第三行,现在我收到一个内部服务器错误。有什么想法吗?
  • @superphonic 您请求了哪个 URL?您有权访问服务器日志吗?
  • 添加你的重写器后,我去 rrr.me 并得到一个内部服务器错误。当我把我的 Rewriterule 规则放回去时,它按预期工作。我没有更改 RewriteCond。
  • @superphonic 我更改了正则表达式以包含根目录。请查看更新的答案。
  • 非常接近。现在将变量传递给 index.php OK。但是现在我的图片、js 文件和 css 文件都找不到了。它们位于 /rrr 目录中名为“assets”的文件夹中。 assets 作为变量被拾取并附加到它看起来像的 index.php 文件中。抱歉,可能应该告诉你该目录中有一个子目录。
猜你喜欢
  • 2010-11-22
  • 2013-08-04
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
相关资源
最近更新 更多