.htaccess - 将所有内容重定向到index.php,但将特定链接重定向到另一个

时间:2013-09-05 05:34:19

标签: .htaccess redirect

我在stackoverflow上读过类似的问题,但没有找到解决我问题的方法。

.htaccess 中,我有:

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 

我需要再添加一个重定向。我有一个真实的网站页面 - domain.com/some_real_page ,我需要一个较短的链接 - domain.com/link 。这怎么可能?

尝试执行以下操作,但它无效:

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 

RewriteCond %{REQUEST_URI} ^/some_real_page$
RewriteRule ^(.*)$ http://www.domain.com/link [R=302,L]

1 个答案:

答案 0 :(得分:1)

这里有两个问题。首先,更具体的重写规则必须先于一般规则。其次,您的特定重写规则是倒退的。

RewriteEngine从上到下处理规则,非常类似于编程if/else if/else。这意味着您希望将所有案例(也称为^(.*)$)放在列表​​底部。之前的所有规则都需要[L]属性在匹配后停止进一步处理。

对于第二部分,您希望将浏览器链接http://www.domain.com/link指向实际文件http://www.domain.com/some_real_page.php。在您的示例代码中,您正在做相反的事情。

最终结果应如下所示:

RewriteEngine on

RewriteCond %{REQUEST_URI} ^/link$
RewriteRule ^(.*)$ some_real_page.php [R=302,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]