![Apache 子域名重定向,子域名代表 URL 中的参数](https://linux22.com/image/556782/Apache%20%E5%AD%90%E5%9F%9F%E5%90%8D%E9%87%8D%E5%AE%9A%E5%90%91%EF%BC%8C%E5%AD%90%E5%9F%9F%E5%90%8D%E4%BB%A3%E8%A1%A8%20URL%20%E4%B8%AD%E7%9A%84%E5%8F%82%E6%95%B0.png)
我正在考虑更新我的 htaccess 文件以控制正在创建的子域。我遇到了一些问题。
首先,我要设置域名http://m.domain.com/并指向http://www.domain.com/mobile.php/mobile
我希望它能像这样工作,因为我不想经历一个重构当前设置的 URL 路由的大型过程,而像这样修复它会使其变得容易得多。
我也希望它在我的开发机器上本地运行。因此下面的 URL 也有效: http://local.m.domain.com本地网站将重定向至http://local.domain.com/mobile.php/mobile
这意味着如果我传递参数,比如::http://m.domain.com/page然后它将路由到页面http://www.domain.com/mobile.php/mobile/page
到目前为止我已经这样做了,但这只是下载一个 php 文件,而不是路由任何页面。
RewriteCond %{HTTP_HOST} (^local\.|^)m\.domain\.com\.au$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ mobile.php\/mobile$1 [QSA]
我知道本地或“无”选择器的正则表达式是惰性的,但我不认为这是导致它失败的原因。当然我可能错了。
任何提示或建议都将受到感激。
答案1
看起来你的规则是让你转到一个 PHP 文件。我不确定你说的“下载一个 php 文件”是什么意思,如果你指的是以纯文本形式下载代码,那么你的 php 处理程序可能存在问题,而不是路由问题。
否则,可能意味着 PHP 代码正在使用原始 URL 进行路由,而不是重写的 URL。
听起来您真正想要做的是让您的最终规则成为重定向。
所以你的规则应该是这样的。
RewriteCond %{HTTP_HOST} ^(local\.)?m\.domain\.com\.au$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ http://%1.domain.com/mobile.php\/mobile$1 [R=301,QSA]
#I am assuming www.domain.com and domain.com and interchangeable