无法启用模式重写

时间:2015-08-07 16:34:36

标签: apache codeigniter mod-rewrite xampp wampserver

我想使用mod_rewrite和Wampserver从地址栏中删除“/index.php/”。 Codeigniter Framework建议使用此代码:

RewriteEngine on
#RewriteBase /
RewriteCond $1 !^(index\.php|img|table-images|robots\.txt|css|fonts|js|uploads|dbg-wizard\.php)
RewriteRule ^(.*)$ index.php/$1 [L]

这应该改变这个网址:

mysite.local/contact_us

到此:

mysite.local/index.php/contact_us

这适用于XAMPP,但使用Wampserver第一个URL会生成错误404! 我用Apache启用了mod_rewrite,错误日志中没有错误。

更新

我在.htacess中添加了.blabla但没有任何反应!这意味着Apache不读取.htaccess!为什么呢?

我将AllowOverride All添加到httpd-vhosts.conf。 Apache没有执行.htaccess,在httpd.conf中启用AllowOverride是不够的。

这是我的httpd-vhosts.conf文件:

<Directory E:\mysite\www>
Options Indexes FollowSymLinks Includes ExecCGI
#Order Deny,Allow   
#Allow from all 
AllowOverride All
Require all granted
</Directory>

1 个答案:

答案 0 :(得分:0)

要检查模式重写是否正常,请尝试以下步骤:

  1. 在根目录中创建一个名为 htaccess_test
  2. 的文件夹
  3. 创建 .htaccess 文件,并将这些代码放入其中并保存。

        options +FollowSymLinks RewriteEngine On        
        RewriteBase /htaccess_test/ 
        RewriteCond %{REQUEST_FILENAME} !-f  
        RewriteCond %{REQUEST_FILENAME} !-d 
        RewriteRule ^([a-zA-Z0-9_-]+)/?$ user.php?u=$1
    
  4. 再创建一个名为 user.php 的文件并将这些代码放入 这个并保存。

    <?php
     if(isset($_GET['u'])){
     echo $_GET['u'];
     }
    
  5. 现在转到浏览器类型{{3}}。

  6. 如果这样做,问题不在你的apache设置中。

    确保您正在编辑正确的 .htaccess 文件。您需要编辑的 .htaccess 文件位于项目的根文件夹中,而不是应用程序或任何其他文件夹中。并把这些代码

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