大量虚拟主机和重写规则导致递归内部重定向

詹斯

vhost_alias用于做大规模虚拟主机,并且有几个站点mod_rewrite用于管理其前端控制器。

我不认为这是Symfony的特定问题,但我正在使用Symfony。

现在,大多数与任何重写规则匹配的请求都将在无限重定向循环中结束,从而导致HTTP错误500。

我检查了日志文件,这是我发现的内容:

(3) [perdir /home/user/www/mysite/] strip per-dir prefix: /home/user/www/mysite/app_dev.php -> app_dev.php
(3) [perdir /home/user/www/mysite/] applying pattern '^$' to uri 'app_dev.php'
(3) [perdir /home/user/www/mysite/] strip per-dir prefix: /home/user/www/mysite/app_dev.php -> app_dev.php
(3) [perdir /home/user/www/mysite/] applying pattern '^(.*)$' to uri 'app_dev.php'
(2) [perdir /home/user/www/mysite/] rewrite 'app_dev.php' -> 'web/app_dev.php'
(3) [perdir /home/user/www/mysite/] add per-dir prefix: web/app_dev.php -> /home/user/www/mysite/web/app_dev.php
(1) [perdir /home/user/www/mysite/] internal redirect with /home/user/www/mysite/web/app_dev.php [INTERNAL REDIRECT]
(3) [perdir /home/user/www/mysite/] add path info postfix: /home/user/www/mysite/home -> /home/user/www/mysite/home/user/www/mysite/web/app_dev.php
(3) [perdir /home/user/www/mysite/] strip per-dir prefix: /home/user/www/mysite/home/user/www/mysite/web/app_dev.php -> home/user/www/mysite/web/app_dev.php
(3) [perdir /home/user/www/mysite/] applying pattern '^$' to uri 'home/user/www/mysite/web/app_dev.php'

如您所见,在内部重定向行之后,绝对路径成为要匹配的URI的一部分,该URI当然不匹配任何文件,并作为一个全新的URI再次进行处理,这导致在该位置附加了新的绝对路径URI。重复此过程,直到达到配置的限制。

我在没有虚拟主机配置的情况下尝试了此操作(工作正常),并注意到在内部重定向之前有一行新内容:

(2) [perdir /home/user/www/mysite/] strip document_root prefix: /home/user/www/mysite/web/app_dev.php -> /web/app_dev.php
(1) [perdir /home/user/www/mysite/] internal redirect with /web/app_dev.php [INTERNAL REDIRECT]

重定向后,实际文件将匹配,没有问题。

是否不应该document_root在虚拟配置以及常规配置中剥离虚拟?

我不明白为什么将虚拟文档根目录视为内部重定向中URI的一部分。这似乎是完全错误的。

我是否缺少某些配置选项?

这是我的.htaccess文件:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^$ web/ [QSA,L]    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ web/$1 [QSA,L]
</IfModule>

这是我的Apache配置文件:

# get the server name from the Host: header
UseCanonicalName Off

<VirtualHost *:80>
    LogLevel debug
    RewriteLogLevel 3
    RewriteLog "/var/log/apache2/rewrite.log"

    VirtualDocumentRoot /home/user/www/%1

#DocumentRoot /home/user/www
#RewriteEngine on
#RewriteCond %{HTTP_HOST} ^(.*)\.dev$ [NC]
#RewriteRule ^/(.+)$ /home/user/www/%1/$1 [QSA,L]

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /home/user/www>
        Options Indexes FollowSymLinks -MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

VirtualDocumentRoot声明下方,有一些注释掉的重写规则。

那是尝试VirtualDocumentRoot用重写规则替换,但是它有一个类似的问题:被剥离的document_root是/home/user/www,将主机名保留为URL的一部分,所以我最终遇到了同样的递归问题。

因此,我想知道是否有人mod_vhost_alias与之合作过mod_rewrite我确实尝试在任何地方(甚至Google!)进行搜索,但找不到太多有关此的信息。

林俊

重写规则的目标(第二个参数)可以是文件路径或URL路径。当不清楚它是什么时,mod_rewrite会猜测,看起来好像是在猜测这是一个文件路径。您可以尝试一些方法:

  1. 添加重写基础或通过添加前导使目标成为绝对URL路径 /
  2. 添加一个附加条件以检查URI是否以开头 /web/
  3. 也许添加另一个条件以检查目标是否存在

对于1和2:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^$ /web/ [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/web/
    RewriteRule ^(.*)$ /web/$1 [QSA,L]
</IfModule>

可能3:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^$ /web/ [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/web%{REQUEST_URI} -f [OR]
    RewriteCond %{DOCUMENT_ROOT}/web%{REQUEST_URI} -d
    RewriteRule ^(.*)$ /web/$1 [QSA,L]
</IfModule>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

虚拟主机和www重定向导致无限重定向

来自分类Dev

Apache非虚拟主机重定向

来自分类Dev

如何为Apache中的虚拟主机编写重写规则?

来自分类Dev

重写规则导致无限重定向循环

来自分类Dev

重写规则超出内部重定向限制

来自分类Dev

Nginx虚拟主机不起作用(错误的重定向)

来自分类Dev

虚拟主机重定向到IP地址

来自分类Dev

将DNS重定向到新的虚拟主机

来自分类Dev

Nginx重定向www。错误的虚拟主机

来自分类Dev

虚拟主机重定向到默认值

来自分类Dev

Apache虚拟主机将http重定向到https

来自分类Dev

在Linux中,配置虚拟主机和本地主机重定向到xampp文件夹

来自分类Dev

在Linux中,配置虚拟主机和本地主机重定向到xampp文件夹

来自分类Dev

301重写/重定向规则导致500内部服务器错误

来自分类Dev

301重写/重定向规则导致500内部服务器错误

来自分类Dev

Laravel 4虚拟主机和Mod重写设置

来自分类Dev

URL重写和重定向规则

来自分类Dev

htaccess重定向和重写规则冲突

来自分类Dev

Apache 的重定向和重写规则

来自分类Dev

阿帕奇:禁用重定向到默认的虚拟主机上不匹配的服务器名称

来自分类Dev

重定向到Apache虚拟主机文件中的子文件夹

来自分类Dev

XAMPP Apache将我的虚拟主机重定向到/ dashboard

来自分类Dev

重定向到Apache虚拟主机文件中的子文件夹

来自分类Dev

具有自签名证书的Apache 2.4始终重定向到默认虚拟主机

来自分类Dev

http到http将apache中的虚拟主机重定向

来自分类Dev

使用以https开头的虚拟主机域名进行重定向

来自分类Dev

仅针对服务器名的Apache虚拟主机重定向

来自分类Dev

重定向到一个影响所有的虚拟主机文件

来自分类Dev

ubuntu 正在将所有虚拟主机重定向到 https?

Related 相关文章

  1. 1

    虚拟主机和www重定向导致无限重定向

  2. 2

    Apache非虚拟主机重定向

  3. 3

    如何为Apache中的虚拟主机编写重写规则?

  4. 4

    重写规则导致无限重定向循环

  5. 5

    重写规则超出内部重定向限制

  6. 6

    Nginx虚拟主机不起作用(错误的重定向)

  7. 7

    虚拟主机重定向到IP地址

  8. 8

    将DNS重定向到新的虚拟主机

  9. 9

    Nginx重定向www。错误的虚拟主机

  10. 10

    虚拟主机重定向到默认值

  11. 11

    Apache虚拟主机将http重定向到https

  12. 12

    在Linux中,配置虚拟主机和本地主机重定向到xampp文件夹

  13. 13

    在Linux中,配置虚拟主机和本地主机重定向到xampp文件夹

  14. 14

    301重写/重定向规则导致500内部服务器错误

  15. 15

    301重写/重定向规则导致500内部服务器错误

  16. 16

    Laravel 4虚拟主机和Mod重写设置

  17. 17

    URL重写和重定向规则

  18. 18

    htaccess重定向和重写规则冲突

  19. 19

    Apache 的重定向和重写规则

  20. 20

    阿帕奇:禁用重定向到默认的虚拟主机上不匹配的服务器名称

  21. 21

    重定向到Apache虚拟主机文件中的子文件夹

  22. 22

    XAMPP Apache将我的虚拟主机重定向到/ dashboard

  23. 23

    重定向到Apache虚拟主机文件中的子文件夹

  24. 24

    具有自签名证书的Apache 2.4始终重定向到默认虚拟主机

  25. 25

    http到http将apache中的虚拟主机重定向

  26. 26

    使用以https开头的虚拟主机域名进行重定向

  27. 27

    仅针对服务器名的Apache虚拟主机重定向

  28. 28

    重定向到一个影响所有的虚拟主机文件

  29. 29

    ubuntu 正在将所有虚拟主机重定向到 https?

热门标签

归档