重写规则仅适用于特定的用户代理?

时间:2016-11-22 13:00:49

标签: php apache .htaccess mod-rewrite url-rewriting

我有一个很大的问题导致我的整个Web根目录关闭(505内部错误)每个域都受到影响,即使htaccess文件只在一个目录中。我的文件结构以这种方式组织,因此每个域都是一个单独的文件夹:

    web root
    -- [domainA]
       (domainA files like the .htaccess file)
    -- [domainB]
    -- [domainC]
    (web root files)

我想实现我的路由系统,使用此.htaccess代码在本地主机上一切正常:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]

但是,我正在测试几个小时,使用相同的.htaccess代码在我的远程服务器上进行路由工作。我上传了文件,当我在www.domainA.com这样的主目录时,它也能正常工作。

但我点击www.domainA.com/signup网站上的每个链接都会导致505 Internal Server Error。整个域名甚至都没有响应很长时间。我必须从远程服务器中删除.htaccess文件,并且可能在15-30分钟之后再次访问该文件。这也使得这个问题难以调试。此外,我的整个 Web根目录似乎也受到影响,因为所有其他域也无法访问(即使.htaccess文件仅位于[domainA]中的单独域文件夹中})。

然后我尝试仅将我的规则应用于名为fake-user的特定用户代理:

    RewriteCond %{HTTP_USER_AGENT}  ^fake-user$
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule . index.php [L]

这种方式令人惊讶地在localhost上工作,我不明白为什么。显然,我不想将我的受众限制为名为fake-user的用户代理与我的网站进行互动。所以目前所有其他用户都会“崩溃”我的网站。我希望得到一些解释可能导致此问题以及如何解决此问题以使其在所有用户的本地主机上工作?

1 个答案:

答案 0 :(得分:1)

听起来它可能是递归,尝试用这个替换你的规则:

RewriteRule ^(?!index\.php$). index.php [NS,L]

只有在不同时才重写。