简体   繁体   English

用apache2重写网址

[英]Rewrite Url with apache2

I'm experimenting with CodeIgniter PHP framework, this framework works like: 我正在尝试使用CodeIgniter PHP框架,该框架的工作方式如下:

http://localhost:7777/~dhalsim/ci/index.php/blog

So, I tried to remove index.php part from there. 因此,我尝试从中删除index.php部分。 So far I do these: 到目前为止,我做到了:

  1. make $config['index_page'] = "index.php"; 使$config['index_page'] = "index.php"; to $config['index_page'] = ""; $config['index_page'] = "";

  2. make $config['uri_protocol'] = "REQUEST_URI"; make $config['uri_protocol'] = "REQUEST_URI"; from $config['uri_protocol'] = "AUTO"; 来自$config['uri_protocol'] = "AUTO";

  3. enable apache mod_rewrite by " a2enmod rewrite " 通过“ a2enmod rewrite ”启用apache mod_rewrite

  4. put a .htaccess file to /ci directory: 将.htaccess文件放入/ci目录:

     RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} ^system.* RewriteRule ^(.*)$ /index.php/$1 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] 
  5. And of course restart apache server 当然还要重启apache服务器

Here is my apache logs with these configurations: 这是具有这些配置的我的Apache日志:

127.0.0.1 - - [17/Jul/2009:02:21:41 +0300] [localhost/sid#7f48e8ad2968][rid#7f48e8e634c8/initial] (3) [perdir /home/dhalsim/public_html/ci/] strip per-dir prefix: /home/dhalsim/public_html/ci/blog -> blog
127.0.0.1 - - [17/Jul/2009:02:21:41 +0300] [localhost/sid#7f48e8ad2968][rid#7f48e8e634c8/initial] (3) [perdir /home/dhalsim/public_html/ci/] applying pattern '^(.*)$' to uri 'blog'
127.0.0.1 - - [17/Jul/2009:02:21:41 +0300] [localhost/sid#7f48e8ad2968][rid#7f48e8e634c8/initial] (4) [perdir /home/dhalsim/public_html/ci/] RewriteCond: input='/~dhalsim/ci/blog' pattern='^system.*' => not-matched
127.0.0.1 - - [17/Jul/2009:02:21:41 +0300] [localhost/sid#7f48e8ad2968][rid#7f48e8e634c8/initial] (3) [perdir /home/dhalsim/public_html/ci/] strip per-dir prefix: /home/dhalsim/public_html/ci/blog -> blog
127.0.0.1 - - [17/Jul/2009:02:21:41 +0300] [localhost/sid#7f48e8ad2968][rid#7f48e8e634c8/initial] (3) [perdir /home/dhalsim/public_html/ci/] applying pattern '^(.*)$' to uri 'blog'
127.0.0.1 - - [17/Jul/2009:02:21:41 +0300] [localhost/sid#7f48e8ad2968][rid#7f48e8e634c8/initial] (4) [perdir /home/dhalsim/public_html/ci/] RewriteCond: input='/home/dhalsim/public_html/ci/blog' pattern='!-f' => matched
127.0.0.1 - - [17/Jul/2009:02:21:41 +0300] [localhost/sid#7f48e8ad2968][rid#7f48e8e634c8/initial] (4) [perdir /home/dhalsim/public_html/ci/] RewriteCond: input='/home/dhalsim/public_html/ci/blog' pattern='!-d' => matched
127.0.0.1 - - [17/Jul/2009:02:21:41 +0300] [localhost/sid#7f48e8ad2968][rid#7f48e8e634c8/initial] (2) [perdir /home/dhalsim/public_html/ci/] rewrite 'blog' -> 'index.php?/blog'
127.0.0.1 - - [17/Jul/2009:02:21:41 +0300] [localhost/sid#7f48e8ad2968][rid#7f48e8e634c8/initial] (3) split uri=index.php?/blog -> uri=index.php, args=/blog
127.0.0.1 - - [17/Jul/2009:02:21:41 +0300] [localhost/sid#7f48e8ad2968][rid#7f48e8e634c8/initial] (3) [perdir /home/dhalsim/public_html/ci/] add per-dir prefix: index.php -> /home/dhalsim/public_html/ci/index.php
127.0.0.1 - - [17/Jul/2009:02:21:41 +0300] [localhost/sid#7f48e8ad2968][rid#7f48e8e634c8/initial] (2) [perdir /home/dhalsim/public_html/ci/] trying to replace prefix /home/dhalsim/public_html/ci/ with /
127.0.0.1 - - [17/Jul/2009:02:21:41 +0300] [localhost/sid#7f48e8ad2968][rid#7f48e8e634c8/initial] (5) strip matching prefix: /home/dhalsim/public_html/ci/index.php -> index.php
127.0.0.1 - - [17/Jul/2009:02:21:41 +0300] [localhost/sid#7f48e8ad2968][rid#7f48e8e634c8/initial] (4) add subst prefix: index.php -> /index.php
127.0.0.1 - - [17/Jul/2009:02:21:41 +0300] [localhost/sid#7f48e8ad2968][rid#7f48e8e634c8/initial] (1) [perdir /home/dhalsim/public_html/ci/] internal redirect with /index.php [INTERNAL REDIRECT]

Here is the result in Firefox: 这是Firefox中的结果:

404 Not Found: 找不到404:
The requested URL /index.php was not found on this server. 在此服务器上找不到请求的URL /index.php。


So, what should I do (or where am I wrong) to get work these URLs? 那么,我应该怎么做(或我在哪里错)来获得这些URL的工作? http://localhost:7777/~dhalsim/ci/blog/ instead of http://localhost:7777/~dhalsim/ci/index.php/blog/ http://localhost:7777/~dhalsim/ci/blog/而不是http://localhost:7777/~dhalsim/ci/index.php/blog/

Here is how i resolve it: 这是我的解决方法:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|flash|css|js|robots\.txt|downloads)

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

Then in the config.php file 然后在config.php文件中

/*
|--------------------------------------------------------------------------
| Base Site URL
|--------------------------------------------------------------------------
|
| URL to your CodeIgniter root. Typically this will be your base URL,
| WITH a trailing slash:
|
|   http://example.com/
|
*/
$config['base_url'] = "http://localhost:7777/~dhalsim/ci/";

/*
|--------------------------------------------------------------------------
| Index File
|--------------------------------------------------------------------------
|
| Typically this will be your index.php file, unless you've renamed it to
| something else. If you are using mod_rewrite to remove the page set this
| variable so that it is blank.
|
*/
$config['index_page'] = "";

UPDATE 更新

In the routes.php file: 在routes.php文件中:

//Point to default controller
$route['default_controller']    = "site/home"; //Set to your controller

// Point to the right controller
$routing_array = array(
            'blog' => 'site/blog',
        ); // set to your blog controler

Use the following Rewrite Rule: 使用以下重写规则:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*)$ /index.php/$1 [NC,L]

In order for this to work you should setup your CodeIgniter app on a different port or use /etc/hosts to give it a simple Vhost ( 127.0.0.1 ci and http://ci:7777/ with Apache set to use the ci vhost.). 为了使它起作用,您应该在其他端口上设置CodeIgniter应用程序,或使用/ etc / hosts为它提供一个简单的Vhost( 127.0.0.1 cihttp://ci:7777/其中Apache设置为使用ci vhost )。 Then you can set the base url to / and not worry about it. 然后,您可以将基本url设置为/而不用担心。 Otherwise you're going to have to deal with confusing directory issues and mod_rewrite. 否则,您将不得不处理令人困惑的目录问题和mod_rewrite。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM