【问题标题】:Remove dir name from url with .htaccess mod rewrite使用 .htaccess mod rewrite 从 url 中删除目录名称
【发布时间】:2014-06-23 17:48:42
【问题描述】:

我正在开发一个 codeigniter 项目,我有以下网址:

mysite/Project/frontend/tournaments/table

我想把它变成:

我的网站/项目/锦标赛/表

我应该在 .htaccess 中写什么? 这是我已经拥有的:

RewriteEngine on

#Send request via index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

【问题讨论】:

  • 这里不是要求人们为您完成工作/编写代码的地方。表现出一些努力。如果您已经尝试过但失败了,请将您的尝试包括在问题中。如果您还没有尝试过,现在是时候尝试了。
  • 谢谢@Patrick Q。好吧,我尝试了很多选项,但似乎都没有。例如。我试过'RewriteRule ^frontend/(.*)$ /$1 [QSA]'
  • 你试过在Route.php中配置吗?
  • @Sobiaholic 我已经考虑过了,但我不知道我该怎么做。我对正则表达式一无所知。

标签: php .htaccess codeigniter mod-rewrite


【解决方案1】:

你试过了吗?

 RewriteRule ^mysite/Project/frontend/tournaments/table/([^/]*)$ mysite/Project/tournaments/table/$1

我认为简单的重写规则将解决您的问题

【讨论】:

  • 好吧,即使在尝试此操作之前,我也发现它存在某种问题。我的目标是使 url 适用于前端之后的每个地址。例如:mysite/project/frontend/segment4/segment5/...
【解决方案2】:

所以,这就是我使用 CodeIgniter 路由功能的方式:

假设锦标赛是您的控制器。

//Example: mysite/Project/tournaments/2332
// Will accepts numbers or letters
$route['Project/(:any)/(:any)'] = 'Project/frontend/$1/$2';


//Example: mysite/Project/tournaments/table
// Will accepts only letters.

$route['Project/([a-z_]+)/([a-z_]+)'] = 'Project/frontend/$1/$2';

您可以为管理员 URL 添加另一个路由规则,如下所示:

//Example: Project/admin/users/add
// You can use either (:any) or ([a-z_]+)
$route['Project/admin/(:any)/(:any)'] = 'Project/admin/$1/$2';

我建议你阅读Routing documentation,一开始有点乏味,但对你有很大帮助!

【讨论】:

  • 非常感谢您的关注。你让我意识到我没有很好地解释我的情况。我项目中的控制器分为几个文件夹。用户只能看到“前端”部分。但我不希望所有路线 ['mysite/Project/(:any)/(:any)'] 去 'mysite/Project/frontend/$1/$2'。其中一些会转到其他目录,例如 mysite/project/admin/segment/segment
  • 更新了我的答案,希望对您有所帮助!
猜你喜欢
  • 2014-02-21
  • 2019-06-19
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多