0

行。所以我正在构建这个可以通过两个不同域访问的站点。所以我不能在我的 .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>

非常感谢任何帮助或想法。

  • 卢克
4

1 回答 1

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

请注意,我没有对此进行测试。

于 2008-11-03T22:27:26.680 回答