确定。所以我正在构建这个可通过两个不同域访问的站点。所以我不能在我的.htaccess中使用RewriteBase。我用来解决这个问题的规则(下面)似乎工作正常。但是,当我使用干净的URL(WAMP)在本地盒子上使用下面的.htaccess设置时,一切正常,但是我在实时服务器(共享主机LAMP)上使用它的那一刻我导航到的每个页面都显示主页(即使浏览器中的URL显然正在更新,我猜也是一个索引。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/domain1.com/(.*)$
RewriteRule ^(.*)$ /domain1.com/index.php?q=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/domain2.com/(.*)$
RewriteRule ^(.*)$ /domain2.com/index.php?q=$1 [L,QSA]
</IfModule>
非常感谢任何帮助或想法。
答案 0 :(得分:2)
可能最好的办法是在本地盒子上重现问题并打开RewriteLogLevel,这样你就可以看到发生了什么。 (因为您通常无法更改共享主机上的日志级别)
您可以通过在Apache主配置中进行目录重写来“模拟”该问题。 (共享主机在到达.htaccess之前显然会自行重写!)如果无法重现问题,则可能必须在远程服务器上启动试错调试。这很难看,但如果这是你唯一的选择:
在替换中使用R(重定向)标志将任何重写的URL发送回浏览器。使用TELNET(或适当的浏览器插件)检查HTTP响应。
不要忘记在正则表达式中逃脱点!
作为旁注,RewriteRule模式在其上方的RewriteConds之前匹配。这种设置可能更适合性能:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/domain1\.com/(.*)$ /domain1.com/index.php?q=$1 [L,QSA]
# ^ should be escaped
请注意,我没有对此进行测试。