1

抱歉,如果有人问过这个问题,或者我不确定标题是否正确,但我刚刚开始使用 htaccess 文件,我有点迷茫。基本上我想要做的是在 URL 前面加上“index.php”。例如,如果用户输入:

http://www.example.com/show/12

我希望 htaccess 文件创建 URL:

http://www.example.com/index.php/show/12

如果这不可能,有没有办法总是去 index.php 前端控制器并将“show/ number ”添加到 URL 中,以便前端控制器可以将参数传递给另一个控制器?

我的 htaccess 代码如下:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php

我需要它假设所有 URL 请求都将发送到 index.php 前端控制器,然后将 URL 的其余部分传递给前端控制器。

我不断收到的错误是:

The requested URL /testing-mod-rewrite/show/12 was not found on this server.

如果有帮助,这是我的前端控制器的 PHP 代码:

include_once('controllers/baseController.php');
$uri = $_SERVER['REQUEST_URI'];
$urifinal = str_replace($uri , '/', $uri);

$request = explode('/', $_SERVER['REQUEST_URI']);
$controller = new BaseController();
$controller->index_action($request);
4

4 回答 4

1

编辑:实际上,我不完全确定你想要什么。在您的问题中,您说如果没有它,您想将 index.php 添加到 url。在您的问题下的评论中,您说您想从 URL 中删除它。前者很可能会更容易使用 PHP。后者应通过以下方式完成:


您可以将信息传递给查询字符串。

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?view=$1 [L]

所以输入的 URL 可能是:example.com/view/test/foo,重写的(内部)URL 是 example.com/index.php?view=test/foo

现在在 PHP 中你应该能够做到:

$view = $_GET['view'];
$controller = new BaseController();
$controller->index_action(explode('/', $view));

请注意,您应该在某个时候验证 $view 中包含的输入。

编辑:另外,我不明白这一行:

$urifinal = str_replace($uri , '/', $uri);

这似乎是一种过于复杂的说法:

$urifinal = '/';

除非我完全错过了什么。

于 2012-12-01T23:28:36.767 回答
0

更新:

下面是一个重定向输入 URL 的示例:

http://www.example.com/show/12到这个网址:

http://www.example.com/index.php?show=12

RewriteEngine on
RewriteRule ^(show)/([0-9]+)/?$ http://www.example.com/index.php?$1=$2 [L]

我知道这不完全是问题的答案,但是要使您的问题按原样工作,您需要创建一个具有该名称的子目录,index.php我认为这是不可能的。

如果目录存在,则使用任何其他名称(例如 new_dir)规则将如下所示:

RewriteEngine on
RewriteRule ^(show)/([0-9]+)/?$ http://www.example.com/new_dir/$1/$2 [L]

最后一行将重定向到:

http://www.example.com/new_dir/show/12

于 2012-12-01T20:14:18.107 回答
0

Visit this link http://www.askapache.com/htaccess/redirect-index-blog-root.html

Or if you own a wordpress site ,it is bit easy. You need to install any of these plugins in your external\local site and follow the instructions in links to work.

1.) http://wordpress.org/extend/plugins/redirection/

2.) http://wordpress.org/extend/plugins/quick-pagepost-redirect-plugin/

3.) http://www.dailyblogtips.com/gocodes-url-redirection-plugin-for-wordpress/

4.) http://pathanruet.wordpress.com/2011/04/23/wordpress-plugin-url-redirection/

于 2012-12-01T20:15:36.953 回答
0

好吧,看起来我的 htaccess 代码很好,我需要做的就是禁用 MultiViews。

<Directory /var/www/>
    Options Indexes MultiViews + FollowSymLinks
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>
于 2012-12-09T02:40:07.177 回答