使用 htaccess 重定向到 codeigniter 控制器

发布于 2024-12-25 00:15:49 字数 686 浏览 1 评论 0原文

这是 url

http://rapidsurfing.net/visio/xip8yT

我的网站是在 codeigniter 中开发的。因此,当链接上面的网址时,我想转到一个控制器功能。我怎样才能使用 htaccess 来做到这一点?

这是我的 httaccces 代码

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^p\/(.*)$ page.php?q=$1 [L]
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?admin/index/url=$1 [QSA,L]
</IfModule>

url 的值为 xip8yTadmin 是控制器名称,index 是函数在那个控制器中。

但是,当我将网址 http://rapidsurfing.net/visio/xip8yT 粘贴到地址栏中时,它会加载 404 未找到错误。 我的代码有什么问题或错误? 我的默认控制器是管理员。

This is the url

http://rapidsurfing.net/visio/xip8yT

My site is developed in codeigniter. So when link this above url I want to go to one controller function. How can I do this using htaccess.

This is my httaccces code

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^p\/(.*)$ page.php?q=$1 [L]
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?admin/index/url=$1 [QSA,L]
</IfModule>

The url have value xip8yT.The admin is the controller name and index is the function in that controller.

But when I paste the url http://rapidsurfing.net/visio/xip8yT in address bar it load 404 not found error.
What is the problem or mistake in my code?
My default controller is admin.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

趴在窗边数星星i 2025-01-01 00:15:49

首先确保您在routes.php 文件中设置了默认控制器。我使用 CI 的方式可以完整回答你的问题。 CodeIginter 本身建议使用 .htaccess 将所有请求重定向到索引页和默认控制器,这就是您所做的。但我建议使用这段代码:

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /yourbasefoldername

    ### Canonicalize codeigniter URLs

    # If your default controller is something other than
    # "welcome" you should probably change this
    RewriteRule ^(yourdefaultcontrollername(/index)?|index(\.php)?)/?$ / [L,R=301]
    RewriteRule ^(.*)/index/?$ $1 [L,R=301]

    # Removes trailing slashes (prevents SEO duplicate content issues)
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/$ $1 [L,R=301]

    # Enforce www
    # If you have subdomains, you can add them to 
    # the list using the "|" (OR) regex operator
    # RewriteCond %{HTTP_HOST} !^(www|subdomain) [NC]
    # RewriteRule ^(.*)$ http://localhost/dfgamez/$1 [L,R=301]

    # Enforce NO www
    # RewriteCond %{HTTP_HOST} ^www [NC]
    # RewriteRule ^(.*)$ http://localhost/dfgamez/$1 [L,R=301]

    ###

    # Removes access to the system folder by users.
    # Additionally this will allow you to create a System.php controller,
    # previously this would not have been possible.
    # 'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php/$1 [L]

    # Checks to see if the user is attempting to access a valid file,
    # such as an image or css document, if this isn't true it sends the
    # request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]

</IfModule>

<IfModule !mod_rewrite.c>

    # Without mod_rewrite, route 404's to the front controller
    ErrorDocument 404 /index.php

</IfModule>

只需将站点地址后面的每个斜杠添加到 index 函数参数即可。

和平出去!

First make sure you set up your default controller in routes.php file. A complete answer to your question is the way that I worked with CI. CodeIginter itself recommend to use a .htaccess for redirecting all of requests to your index page and your default controller and it's what you did. But I recommend to use this piece of code:

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /yourbasefoldername

    ### Canonicalize codeigniter URLs

    # If your default controller is something other than
    # "welcome" you should probably change this
    RewriteRule ^(yourdefaultcontrollername(/index)?|index(\.php)?)/?$ / [L,R=301]
    RewriteRule ^(.*)/index/?$ $1 [L,R=301]

    # Removes trailing slashes (prevents SEO duplicate content issues)
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/$ $1 [L,R=301]

    # Enforce www
    # If you have subdomains, you can add them to 
    # the list using the "|" (OR) regex operator
    # RewriteCond %{HTTP_HOST} !^(www|subdomain) [NC]
    # RewriteRule ^(.*)$ http://localhost/dfgamez/$1 [L,R=301]

    # Enforce NO www
    # RewriteCond %{HTTP_HOST} ^www [NC]
    # RewriteRule ^(.*)$ http://localhost/dfgamez/$1 [L,R=301]

    ###

    # Removes access to the system folder by users.
    # Additionally this will allow you to create a System.php controller,
    # previously this would not have been possible.
    # 'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php/$1 [L]

    # Checks to see if the user is attempting to access a valid file,
    # such as an image or css document, if this isn't true it sends the
    # request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]

</IfModule>

<IfModule !mod_rewrite.c>

    # Without mod_rewrite, route 404's to the front controller
    ErrorDocument 404 /index.php

</IfModule>

Simply you'll get every slashes after the site address to your index function parameters.

Peace Out!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文