我试图为GIT的“cgit”web-ui设置一个服务器。 我已经从开发人员的网站下载了源代码,并按照说明正确编译了它。
我的default-server.conf如下所示:
# # Global configuration that will be applicable for all virtual hosts, unless # deleted here, or overriden elswhere. # DocumentRoot "/srv/www/htdocs/cgit" # # Configure the DocumentRoot # <Directory "/srv/www/htdocs"> # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs-2.2/mod/core.html#options # for more information. Options None # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # Options FileInfo AuthConfig Limit AllowOverride None # Controls who can get stuff from this server. Order allow,deny Allow from all </Directory> <Directory "/srv/www/htdocs/cgit/"> AllowOverride None Options FollowSymlinks +ExecCGI DirectoryIndex / Order allow,deny Allow from all </Directory> # Aliases: aliases can be added as needed (with no limit). The format is # Alias fakename realname # # Note that if you include a trailing / on fakename then the server will # require it to be present in the URL. So "/icons" isn't aliased in this # example, only "/icons/". If the fakename is slash-terminated, then the # realname must also be slash terminated, and if the fakename omits the # trailing slash, the realname must also omit it. # # We include the /icons/ alias for FancyIndexed directory listings. If you # do not use FancyIndexing, you may comment this out. # Alias /icons/ "/usr/share/apache2/icons/" <Directory "/usr/share/apache2/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> # ScriptAlias: This controls which directories contain server scripts. # ScriptAliases are essentially the same as Aliases, except that # documents in the realname directory are treated as applications and # run by the server when requested rather than as documents sent to the client. # The same rules about trailing "/" apply to ScriptAlias directives as to # Alias. # ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/" # "/srv/www/cgi-bin" should be changed to whatever your ScriptAliased # CGI directory exists, if you have that configured. # <Directory "/srv/www/cgi-bin"> AllowOverride None Options +ExecCGI -Includes Order allow,deny Allow from all </Directory> # UserDir: The name of the directory that is appended onto a user's home # directory if a ~user request is received. # # To disable it, simply remove userdir from the list of modules in APACHE_MODULES # in /etc/sysconfig/apache2. # <IfModule mod_userdir.c> # Note that the name of the user directory ("public_html") cannot simply be # changed here, since it is a compile time setting. The apache package # would have to be rebuilt. You could work around by deleting # /usr/sbin/suexec, but then all scripts from the directories would be # executed with the UID of the webserver. UserDir public_html # The actual configuration of the directory is in # /etc/apache2/mod_userdir.conf. Include /etc/apache2/mod_userdir.conf # You can, however, change the ~ if you find it awkward, by mapping eg # http://www.example.com/users/karl-heinz/ --> /home/karl-heinz/public_html/ #AliasMatch ^/users/([a-zA-Z0-9-_.]*)/?(.*) /home/$1/public_html/$2 </IfModule> # Include all *.conf files from /etc/apache2/conf.d/. # # This is mostly meant as a place for other RPM packages to drop in their # configuration snippet. # # You can comment this out here if you want those bits include only in a # certain virtual host, but not here. # Include /etc/apache2/conf.d/*.conf # The manual... if it is installed ('?' means it won't complain) Include /etc/apache2/conf.d/apache2-manual?conf
当我尝试通过在浏览器的URL栏中写入“localhost”来访问gui时,我得到一个“服务器错误 – 错误500” 。
在错误日志(/ var / log / apache2 / error_log)中,我每次刷新时都会看到这一行:
[Mon Apr 23 13:52:39 2012] [error] [client ::1] Request exceeded the limit of 10 subrequest nesting levels due to probable confguration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
我已经尝试使用LimitInternalRecursion指令,并将其设置为“500”到最后。 指令没有实际的问题,就我所知,只是某种无限循环的重写。
你遇到的问题是因为这一行:
DirectoryIndex /
基本上,这就是说,当你访问http://localhost ,显示/然后将显示/等等。DirectoryIndex应该指定一个文件; 当你访问一个目录时,如果这个文件存在,那么它就会显示出来。 所以如果你有:
DirectoryIndex cgit.cgi
然后,当你访问http://localhost ,它将显示cgit.cgi (如果它存在于该目录中)。 另一个技巧 – 在/etc/apache2/conf.d/*.conf使用虚拟主机。 例如,给你类似的代码,你可以在/etc/apache2/conf.d/cgit.conf有以下内容:
<Directory "/srv/www/htdocs/cgit"> AllowOverride None Options FollowSymlinks +ExecCGI Order allow,deny Allow from all </Directory>
然后,您可以在/etc/apache2/httpd.conf使用原始DocumentRoot ,而无需修改原始文件。