我在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]
答案 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]