2

在我的主要公共目录中,我有这个 .htaccess 文件,但是在访问时/register出现 404 错误。

Options +FollowSymlinks
RewriteEngine On
RewriteRule ^register$ register.php

有了这个,我想让任何访问的人都/register可以使用/register.php. 我确定它mod_rewrite已启用并且AllowOverride All存在于我的虚拟主机文件中。

有谁知道我该如何解决这个问题?我得到的只是The requested URL /register was not found on this server.

虚拟主机:

<VirtualHost *:80>
        ServerAdmin my@email.com

        ServerName my.site.com
        DocumentRoot /home/mark/public
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /home/mark/public>
                Options All MultiViews ExecCGI
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog /home/mark/logs/public_error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
        CustomLog /home/mark/logs/public_access.log combined
</VirtualHost>
4

2 回答 2

2
    <Directory /home/mark/public>
            Options All MultiViews ExecCGI
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

您需要关闭 MultiViews

            Options All -MultiViews ExecCGI

它搞乱了可选的内容协商。从 apache 文档:

如果服务器收到对 /some/dir/foo 的请求并且 /some/dir/foo 不存在,则服务器读取目录以查找所有名为 foo.* 的文件,并有效地伪造一个类型映射,其中命名所有这些文件,为它们分配相同的媒体类型和内容编码,如果客户端按名称要求其中之一。然后它选择最符合客户要求的匹配项,并返回该文档。

如果你要重写一个规则/register/register.php你不希望 MutliViews 在它到达你的重写规则之前就搞砸了。

于 2012-09-27T21:08:38.047 回答
0

这对我有用:

/etc/apache2/sites-enabled/000-default

<VirtualHost *:80>
        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
        ....
</VirtualHost>

/var/www/.htaccess

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/register$
RewriteRule ^(.*)$ register.php [NS,L]

编辑:添加 DocumentRoot /var/www

于 2012-09-27T20:42:12.097 回答