【发布时间】:2015-07-28 07:52:27
【问题描述】:
我想知道,如何在没有 302 重定向的情况下重写 URL。
该网站被 2 个域定位。
- 第一个域
(domain1.com)聚焦所有网站。
- 第二个域
(domain2.com)只关注一个功能来执行url 缩短器
这是我的.htaccess:
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain2.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain2.com$
RewriteRule ^([A-Za-z0-9-]+)$ http://domain2.com/url/$1 [L]
Rewritecond %{HTTP_HOST} domain2.com [NC]
RewriteCond %{REQUEST_URI} ^/$
Rewriterule ^(.*)$ http://domain2.com/soon/ [QSA,L,R=301]
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]
RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
当我打电话给我的猎枪http://domain2.com/57b97f2 时,我会通过 302 重定向重定向到 http://domain2.com/url/57b97f2。
如何避免这种不需要的 302 重定向?
======= 编辑 ======= :
url() 函数的控制器名为:webadmin
我的路线是:
$route['default_controller'] = 'webadmin';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
$route['(.+)'] = 'webadmin/$1';
网络管理员控制器:
function url($code)
{
//do something
}
【问题讨论】:
-
你必须从你的规则中删除
http://domain2.com(否则你会得到一个重定向,即使有L标志)。但是domain1和domain2必须共享同一个文档根文件夹才能使其以这种方式工作 -
Domain1 和 Domain2 实际上关注同一个文档根目录。
-
好的,第一个好点。现在,你想要什么而不是 302 重定向?另外,
url/57b97f2(例如)是一个真实的文件/文件夹吗? -
当我调用我的缩短 url 时,我希望调用我的函数
url()而不重定向到domain2.com/url/57b97f2而是重定向到domain2.com/57b97f2 -
那么只需从您的规则中删除
http://domain2.com:RewriteRule ^([A-Za-z0-9-]+)$ /url/$1 [L]。这意味着如果您现在转到http://domain2.com/something,它将在内部重写为/url/something(然后您必须在那里处理它)
标签: .htaccess codeigniter mod-rewrite url-rewriting