【问题标题】:CodeIgniter htaccess remove query string from URLCodeIgniter htaccess 从 URL 中删除查询字符串
【发布时间】:2016-05-02 18:18:42
【问题描述】:

我想更改网址 mysite.com/page?id=s3q4afasmysite.com/page/s3q4afas 与 htaccess。

到目前为止我所拥有的:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$1 [PT,L]


RewriteBase /
RewriteCond %{QUERY_STRING} ^id=([^&]*) [NC]
RewriteRule ^ %{REQUEST_URI}page/%1 [R,L]
</IfModule>

有人可以帮帮我吗?

【问题讨论】:

  • 你跳过了the URL section of the docs。你不需要为此惹恼.htaccess默认情况下,CodeIgniter 中禁用查询字符串。只需确保 CodeIgniter 的 enable_query_strings 配置选项设置为 FALSE

标签: .htaccess codeigniter codeigniter-3


【解决方案1】:

您可以使用以下 .htaccess :

<IfModule mod_rewrite.c>


    RewriteEngine on
    ##1)Redirect "/page/?id=foo" to "/page/foo"##
    RewriteCond %{THE_REQUEST} /page/?\?id=([^\s]+) [NC]
    RewriteRule ^ /page/%1? [L,R]
    ##2)internally redirect "/page/foo" to "/page/?id=foo"##
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^page/([^/]+)/?$ /page/?id=$1 [NC,L]
    ##3)rewrite any other non-existent request to "index.php"##
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .* index.php/$1 [PT,L]
</IfModule>

【讨论】:

  • 也许应该避免在page 斜线之后,因为他的示例中没有任何斜线。还是这些代码 /page/?\?id=([^\s]+)/page/?id=$1 已经做出来了?
  • 当一个简单的 CodeIgniter 配置选项决定 URL 格式时,为什么要使用 .htaccess 呢? (默认情况下,查询字符串在 CodeIgniter 中是禁用的。)
  • 完美运行,但现在我得到了 404 页面。 :-( 我不喜欢默认启用查询字符串!
【解决方案2】:

您无需为此更改.htaccess 文件。 CodeIgniter 的 URL 默认是分段的,除非您有意将 enable_query_strings 配置选项设置为 TRUE

默认情况下,CodeIgniter 中的 URL 被设计为搜索引擎和人类友好的。 CodeIgniter 使用基于分段的方法,而不是使用与动态系统同义的 URL 的标准“查询字符串”方法:

example.com/news/article/my_article

查看:codeigniter.com/user_guide/general/urls.html

启用查询字符串

在某些情况下,您可能更喜欢使用查询字符串 URL:

index.php?c=products&m=view&id=345

CodeIgniter 可选支持此功能,可以在您的application/config.php 文件中启用。如果你打开你的配置文件,你会看到这些项目:

$config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c';
$config['function_trigger'] = 'm';

如果您将enable_query_strings 更改为TRUE,此功能将启用。然后,您的控制器和函数将可以使用您设置的“触发器”字词来调用您的控制器和方法:

index.php?c=controller&m=method

【讨论】:

    猜你喜欢
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多