如何根据主机名或IP地址动态更改RewriteBase?
目前我在本地计算机上构建应用程序。应用程序位于 /www/projects/mycustomproject/
和访问速度它有自己的个人域名,可以说mycustomproject.com
。我已通过本地网络提供了Apache-PHP-MySQL,因此任何人都可以通过IP地址访问我的项目,该地址为192.168.1.80
,并且链接到/www/
。 要为mycustomproject.com
访问应用程序,您必须键入192.168.1.80/projects/mycustomproject/
,并且来到这里的问题,通过默认的配置是:如何根据主机名或IP地址动态更改RewriteBase?
要通过IP访问应用程序解决这一假设是:
RewriteEngine on
RewriteBase /projects/mycustomproject/
问题是如何定义这样的规则:
if REMOTE_ADDR == 192.168.*
RewriteBase /projects/mycustomproject/
else if HOSTNAME == 'mycustomproject.com'
RewriteBase/
etc.
可能会有其他自定义条件的基础在主机名或IP地址和IF/ELSE
语句是更优选的RewriteCond
为什么不只是将自定义项目设置为virtual host?
设置类似于主机:
# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80
# default root for non-matched ServerName
DocumentRoot /www/
<VirtualHost *:80>
ServerName local.mycustomproject.com
DocumentRoot /www/projects/mycustomproject/
</VirtualHost>
然后,您可以为local.mycustomproject.com本地DNS或HOSTS文件条目。
通过这种方式,您可以在本地托管尽可能多的项目(只需添加更多的<VirtualHost>
部分),并且它们非常密切地反映真实的生产环境。
如果要使用“真实”域名,只需删除“本地”。在我的例子中。
您还可以使用ServerAlias设置如ServerAlias www.local.mycustomproject.com
它具有VirtualHost配置,并且它已链接到mycustomproject.com,并且它按预期工作,问题出在.htaccess RewriteBase中,该配置为仅适用于域而不适用于IP地址。它假设可以通过网络访问,并且应该链接到不同的RewriteBase – Nazariy
我想我不明白你要完成的任务。您是否试图通过IP +路径或主机名同时访问该站点?为什么?你的问题听起来不对,但是直接解决它的方法在这里解释:http://stackoverflow.com/questions/2045897/with-mod-rewrite-can-i-specify-a-rewritebase-within-a-rewritecond – gregmac
对不起,如果我不清楚,我想让我的应用程序在本地网络和本地主机上工作,并具有不同的预设(可通过网络访问,无需担心路由器和防火墙)。它的另一个用途可以是一个用于本地环境和活动服务器的.htaccess文件。 – Nazariy