无法启用 mod_rewrite
Posted
技术标签:
【中文标题】无法启用 mod_rewrite【英文标题】:Cannot enable mode rewrite 【发布时间】:2015-10-31 04:31:42 【问题描述】:我想使用带有 Wampserver 的 mod_rewrite 从地址栏中删除“/index.php/”。 Codeigniter 框架建议使用此代码:
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>
【问题讨论】:
你的服务器重启了吗? 什么版本的 WAMPServer? 我每次都重新启动。我的 wampserver 是:“wampserver2.5-Apache-2.4.9-mysql-5.6.17-php5.5.12-32b” 检查指令AccessFileName
和AllowOverride
的值。
【参考方案1】:
要检查模式重写是否正常,请尝试以下步骤:
-
在您的根目录中创建一个名为 htaccess_test 的文件夹
创建一个.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
再创建一个名为 user.php 的文件并将这些代码放入 这个并保存它。
<?php
if(isset($_GET['u']))
echo $_GET['u'];
现在转到浏览器类型http://localhost/htaccess_test/put_some_value_here。
如果这有效,则问题不在您的 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>
【讨论】:
以上是关于无法启用 mod_rewrite的主要内容,如果未能解决你的问题,请参考以下文章