0

我一直在解决.htaccess我购买的脚本的一个问题,这给我带来了很大的冲突。如果我启用了重写并使用 Blitz.io 进行 1-250 测试,那么在所有请求超时之前它会到达大约 5 个用户。当此事件发生时,我看不到任何服务器资源争用,但我偶尔会看到来自 Apache 的事件,即我已经使用了最大连接数。这不可能是正确的,因为我已将其设置为处理数千个连接。

进一步支持重写理论,如果我禁用重写并针对同一个 php 页面运行 Blitz,它将完成测试而不会出现任何重要的错误或超时(它也会破坏大部分脚本 :))。我还注意到,我在 Blitz 中重写关闭的响应时间最长约为 250 毫秒,而如果我启用重写引擎,它会超过一秒。

任何建议将不胜感激,我已经搜索了很多并没有想出太多,当然我是重写 n00b。

提前谢谢,现在要去冰我的头......

    # enable apache morRewrite module #
    RewriteEngine on

    RewriteBase /

    # set files headers
    <IfModule mod_headers.c>
    <FilesMatch "\.(css|js|png|gif|jpg|jpeg|htc)$">
    Header set Cache-Control "max-age=2678400, public, must-revalidate"
    </FilesMatch>
    </IfModule>

    # allow request methods
    <Limit POST PUT DELETE GET OPTIONS HEAD>
       Order deny,allow
       Allow from All
    </Limit>

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f

    ErrorDocument 404 /404.html

    # non last slash redirect
    RewriteCond %{REQUEST_URI} !(\.php|\.html|\.xml|\.txt|[\/])$ [NC]
    RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [NC,L,R=301]

     # define system languages
    #RewriteRule ^([a-zA-Z]{2})$ index.php?page=$1 [QSA,L]

    # define paging
    RewriteRule ^([^//]+)/?(.*)?/index([0-9]*).ht(m?ml?)$ index.php?           page=$1&rlVareables=$2&pg=$3 [QSA,L]

    # define listing
    RewriteRule ^(([\w\-\_]+)?/)(.+)-l?([0-9]+).ht(m|ml)$ index.php? page=$2&rlVareables=$3&listing_id=$4 [QSA,L]

    # wildcard request
    RewriteCond %{HTTP_HOST} ^((?!www\.|m\.|mobile\.).*)\..+\.[^/]+$ [NC]
    #RewriteCond %{HTTP_HOST} ^((?!www\.|m\.|mobile\.).*)\..+$ [NC] # FIRST LEVEL         DOMAIN (localhost) USAGE
    RewriteRule (.*) index.php?page=%1&wildcard&rlVareables=$1 [QSA,L]

    # account request (sub-directory)
    RewriteRule ^((\w{2})/)?([\w-_]{3,})$ index.php?page=$3&lang=$2&account_request [QSA,L]

    # define single pages
    RewriteRule ^([^//]+)/?(^/*)?.ht(m?ml?)$ index.php?page=$1 [QSA,L]

    # define other pages
    RewriteRule ^([^//]+)/?(.*)?/?(.*)?(.ht(m?ml?)|/+)$ index.php?page=$1&rlVareables=$2 [QSA,L]
4

1 回答 1

0

您是否查看过您的访问日志和 rewrite.logs(如果您可以临时启用后者)?

跳出来的一件事是您的家具(css、jpeg 等)的 Header 指令,特别是必须重新验证标志。这将强制客户端浏览器为每个图像等发出条件 GET。这不是默认行为。浏览器将假定任何静态文件的 10% 的可缓存寿命(也就是说,如果它是 10 周,浏览器将只重新验证文件每周一次)。好的,大多数这些 GET 将导致 304“未修改”响应,但这仍然意味着 Apache 必须验证这些请求,这可以轻松地将对服务器的整体请求率提高 5-10 倍。

“非最后一个斜杠重定向”将触发除 php、html、xml 和 txt 文件(包括 jpeg 等)之外的所有 URI。这两个 REQUEST_FILENAME 条件应紧接在 REQUEST_URI 条件之前。即 ErrorDocument 指令需要向上移动 4 行。

您还需要使用测试向量来检查单页和其他页面正则表达式。它们是有效的语法,但不会给你我认为你想要的东西(例如[^//],与[^/];.ht(m?ml?)匹配shtmml; ^/* 可能应该读取[^/]*,因此该规则当前仅匹配^([^//]+)/?空字符串并因此退化为(^/*)?.ht(m?ml?)$.

如果我是你,我会要求退钱:-(

于 2012-12-22T17:43:03.103 回答