使用mod_rewrite将RewriteBase替换为RewriteCond用于基目录

时间:2016-11-12 10:03:01

标签: apache .htaccess mod-rewrite

我在尝试为生产/实时环境设置多个RewriteBase目录时遇到问题。我遵循了以下提供的指导:

Many RewriteBase in one .htaccess file?

With mod_rewrite can I specify a RewriteBase within a RewriteCond?

除非基本目录是根目录(即" /"),否则大致似乎有效:

RewriteCond %{HTTP_HOST} ^localhost/tla-test/(.)$ [OR]
RewriteCond %{HTTP_HOST} ^192.168.0.200/tla-test/(.)$
RewriteRule ^(.*)$ tla-test/index.php&page=$1 [L]

RewriteCond %{HTTP_HOST} ^test.townshendla.com/(.)$
RewriteRule ^(.*)$ /index.php&page=$1 [L]

#Send any reqests to the index.php file
RewriteCond %{REQUEST_FILENAME}    !-f
RewriteCond %{REQUEST_FILENAME}    !-d
RewriteRule .*                     index.php

第一次重写条件完美无缺。第二次重写条件一旦出现就会出现错误500.因为它的1和1我无法获得Apache错误日志但如果我尝试在测试环境中复制,我会收到以下错误(请注意这可能无关):

  

AH00124:请求超出了10次内部重定向的限制   可能的配置错误。使用' LimitInternalRecursion'增加   必要时限制。使用' LogLevel debug'获得回溯。

任何想法都会非常感激。

1 个答案:

答案 0 :(得分:0)

感谢您的帮助。首先anubhava你对HTTP_HOST是正确的,其次Walf你的指针非常宝贵,它引导我到这个页面,详细解释了一个有类似问题的人:

Mod_Rewrite unexpected behavior L flag

总的来说,问题似乎是文件/目录检查进入循环,似乎解决这个问题的代码是:

RewriteCond %{HTTP_HOST} ^(localhost|192.168.0.200)$
RewriteCond %{REQUEST_FILENAME}    !-f
RewriteCond %{REQUEST_FILENAME}    !-d
RewriteRule ^(.*)$ /tla-test/index.php?page=$1

RewriteCond %{HTTP_HOST} !^(localhost|192.168.0.200)$
RewriteCond %{REQUEST_FILENAME}    !-f
RewriteCond %{REQUEST_FILENAME}    !-d
RewriteRule ^(.*)$ /index.php?page=$1

由于