2008-11-03 146 views
0

好的。所以我正在建设这个网站,可以通过两个不同的领域访问。所以我不能在我的.htaccess中使用RewriteBase。我用来解决这个问题的规则(下面)似乎工作正常。但是,当我使用干净的URL(WAMP)在我的本地盒子上使用下面的.htaccess设置时,它一切正常,但是当我在实时服务器上使用它时(共享主机LAMP),我导航到的每个页面显示主页一个在我猜的索引下),即使浏览器中的URL明显被更新。Apache .htaccess mod_rewrite和干净的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

您是否已验证mod_rewrite是否在您的实时服务器上正确启用?如果是这样,您是否验证过其他适用于Apache的适用设置在您的测试服务器和实时服务器之间也是相同的? – 2008-11-03 22:19:34

回答

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 

请注意,我没有测试过这一点。