.htaccess重写停止执行的规则

时间:2013-01-30 12:15:34

标签: apache .htaccess mod-rewrite

我的大多数htaccess规则都会将未签名的用户重定向到index.html 但是当我将它们重定向到index.html时,所有这些规则也会重新运行到该页面。我需要为访问索引文件的用户运行一组最小规则。

显而易见[L]停止了htaccess规则'运行。

这个问题会有什么更好的方法?这是一种正确的方法,还是你有更好的建议?

RewriteCond %{REQUEST_URI} index\.html
RewriteRule ^(.*)$ index.html [L]

我的完整htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

    RewriteCond %{REQUEST_URI} (\/onefolder|\/secondfolder) [NC]
    RewriteCond %{REMOTE_ADDR} !111\.22\.33\.44 [NC]
    RewriteCond %{REQUEST_URI} !(index\.html) [NC]
    RewriteRule ^(.*)$ index.html [F]

    RewriteCond %{HTTP_USER_AGENT} oneagent|otheragent [NC]
    RewriteCond %{REQUEST_URI} !(index\.html) [NC]
    RewriteRule ^(.*)$ index.html? [R=301,L]

    RewriteCond %{HTTP_USER_AGENT} betteragent|otherbetterganet [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !(index\.html) [NC]
    RewriteRule ^(.*)$ index.html? [R=301,L]

    RewriteCond %{HTTP_COOKIE} !username [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !(\/importantone|\/somefolder|index\.html) [NC]
    RewriteRule ^(.*)$ index.html [L]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

1 个答案:

答案 0 :(得分:2)

你可以做的一些事情。如果您想简单地停止重写index.html,您可以在规则的最顶端执行与您拥有的相似的操作(但更简单):

RewriteRule ^/?index.html$ - [L]

-只是“通过”,基本上是这样重写就会停止。

或者,您可以通过将其添加到规则的顶部来完全阻止循环:

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

做类似的事情,但检查是否有任何类型的内部重定向。