【问题标题】:Prepend to URL using htaccess使用 htaccess 在 URL 前添加
【发布时间】:2012-11-19 17:41:11
【问题描述】:

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

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

我希望 htaccess 文件创建 URL:

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

如果不行,有没有办法总是去 index.php 前端控制器,在 URL 中添加“show/number”,这样前端控制器就可以通过参数到另一个控制器?

我的 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);

【问题讨论】:

  • 您为什么希望用户在网址中看到index.php/?大多数开发人员都希望隐藏这一点。
  • 就是这样,我不想在 URL 中包含它,我想隐藏它并允许 htaccess 文件始终转到 index.php 前端控制器和 URL 的其余部分传递给 index.php。
  • 当前的 htaccess 到底有什么问题?我觉得很好
  • 它一直说“在此服务器上找不到请求的 URL /testing-mod-rewrite/show/12。”
  • 尝试添加RewriteBase /testing-mod-rewrite。还要确保 mod_rewrite 已启用。

标签: php .htaccess url-rewriting


【解决方案1】:

更新:

这是一个重定向输入 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

【讨论】:

  • 您好,感谢您的回复。不幸的是,这不起作用,我想我已经尝试过了。
  • @kibria3:我没有测试过,但是当我尝试这样做时,发现了一个名为/index.php/ 的子目录。 ¿ 这真的是你想要的吗?不应该是 /index.php?show=12 之类的东西吗?
【解决方案2】:

访问此链接 http://www.askapache.com/htaccess/redirect-index-blog-root.html

或者,如果您拥有一个 wordpress 网站,这有点容易。 您需要在您的外部\本地站点中安装这些插件中的任何一个,并按照链接中的说明进行操作。

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/

【讨论】:

  • 您好,感谢您的回复。我已经尝试了 askapache 网站,但这不起作用。我从头开始创建一切,我会使用 WordPress 或 Symfony 之类的东西,但有人告诉我不要依赖任何现有的框架/cms。
【解决方案3】:

编辑:实际上,我不完全确定您想要什么。在您的问题中,您说如果没有它,您想将 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 = '/';

除非我完全错过了什么。

【讨论】:

  • 您好,感谢您的回复。我会给你的代码试一试,看看它是如何进行的。至于 $urifinal 变量,我将其用于测试目的,并重定向到其他目录只是为了尝试一下。
【解决方案4】:

嗯,我的 htaccess 代码似乎很好,我需要做的就是禁用 MultiViews。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2017-08-16
    • 2021-03-09
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    相关资源
    最近更新 更多