无法删除index.php,自定义路由无法正常工作

时间:2013-08-23 09:36:48

标签: php .htaccess codeigniter wampserver

我知道这个问题更适合服务器错误,但遗憾的是我因质量问题而被禁止(我在2-3个问题上被投了票。)所以问下这些问题的下一个最好的地方就在这里。

我有两个与CodeIgniter路由相关的问题。

第一个问题是我似乎无法在网址中删除index.php。我跟着instructions on how to remove it。我的.htaccess文件中有以下mod重写代码(见下文),位于我的WAMP服务器的根目录(CI位于根目录,不在自己的文件夹中)。我在httpd.conf文件LoadModule rewrite_module modules/mod_rewrite.so中取消注释了这一行。我从index.php删除了$config['index_page'] = "index.php";。我重新启动了所有WAMP服务。

我的第二个问题是我有一个名为search的控制器和一个名为index的方法。我想将结果网址从http://localhost/index.php/search/index更改为http://localhost/search/whatever_im_searching_for。我在routes.php文件中尝试了以下自定义路由,但它不起作用:$route['search/(.*)'] = "search/$1";

RewriteEngine On

# Put your installation directory here:
# If your URL is www.example.com/, use /
# If your URL is www.example.com/site_folder/, use /site_folder/

RewriteBase /

# Do not enable rewriting for files or directories that exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# For reuests that are not actual files or directories,
# Rewrite to index.php/URL
RewriteRule ^(.*)$ index.php/$1 [PT,L]

我正在努力理解.htaccess中的代码以及如何使用CI的自定义路由。任何帮助将不胜感激。提前谢谢。


编辑1

enter image description here

4 个答案:

答案 0 :(得分:1)

像这样编辑你的htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ index.php?/$1 [L]

RewriteCond %{REQUEST_URI} ^LoginTut.*
RewriteRule ^(.*)$ index.php?/$1 [L]

RewriteCond $1 !^(index\.php|images|table-images|js|robots\.txt|css|captcha)

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

要将您的搜索结果放在网址中,您可以查看以下内容:

https://stackoverflow.com/a/12070284/1379394

答案 1 :(得分:1)

第二个问题:

$route['search/(:any)'] = "search/index/$1";

答案 2 :(得分:1)

检查Apache的默认配置文件。在WAMP上它可能在

<WAMPSERVER_HOME>\bin\apache\Apache2.2.xx\conf

如果它看起来像这样:

    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

然后改变两者:

AllowOverride None

为:

AllowOverride All

答案 3 :(得分:1)

我遇到了同样的问题,我只能通过写.htaccess

进行修复
RewriteEngine on

RewriteCond $1 !^(index\.php|images|robots\.txt)

RewriteRule ^(.*)$ index.php/$1 [L]

它完美无缺。