2012-09-27 98 views
1

在我的主公共目录中,我有这个.htaccess文件,但是当访问/register时,我得到一个404错误。简单的mod_rewrite规则不起作用

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 [email protected] 

     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> 
+0

而当你去'http:// yourdomain.com/register.php',你没有得到404? –

+0

这是正确的。 – user1447941

+0

你确定你不打算以'/'结尾的URL吗? –

回答

1
<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摆弄东西之前,甚至会到你的重写规则。

0

这个工作对我来说:

的/ etc/apache2的/启用的站点 -/000-默认

<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

+0

似乎没有工作。 – user1447941

+0

@edit:我已经启用了RewriteEngine。 – user1447941

+0

然后你的虚拟主机文件看起来像什么 – ejohansson