简单的重定向与其下面的规则相结合

时间:2013-12-10 16:35:52

标签: regex apache .htaccess mod-rewrite redirect

我想在我的.htaccess中进行简单的重定向,目标是为长URL建立一个“短链接”。

mydomain.com/short

将用户带到

http://www.mydomain.com/blahblah/foo/bar/foobar/uglylongurl.html

所以我尝试了这个:

Redirect /short http://www.mydomain.com/blahblah/foo/bar/foobar/uglylongurl.html

但在同一个.htaccess文件中是:

  # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

这导致我的简单重定向将“short”作为查询字符串附加。

我已经尝试[R]立即重定向,如果使用第一个(最简单的)规则,我也尝试[L]停止处理。两者都给我一个500错误。

我希望有人知道我在这里失踪了什么。我处于紧迫的截止日期,这只会让我感到害怕:P提前感谢您的帮助。


非常感谢应对此工作的响应者。我有重定向高于其他规则,但是,我需要将其更改为RewriteRule并添加其示例中的其他代码。

在此之后出现了另外一个问题....并且根据他的建议,我将问题的下一层添加到此问题(而不是评论回复,其中代码标签不起作用并且很难阅读)。


所以这是我的下一期。无论是重定向到内部页面还是外部URL,列表中的第一个都可以正常工作。但后续规则给我一个404错误。这是它的样子(注意它们都是之前附加查询字符串的那个):

RewriteRule ^short/?$ /ugly/long/url.html [L,NC]
RewriteRule ^/sweet/?$ /another/ugly/long/url.html [L,NC]
RewriteRule ^/offsite/?$ http://www.somewhereelse.com/with/a/long/url.html [L,NC]


  # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

1 个答案:

答案 0 :(得分:1)

重写规则的顺序非常重要。首先得到你想要的规则,然后是其余的规则。

RewriteEngine On

RewriteRule ^short/?$ /blahblah/foo/bar/foobar/uglylongurl.html [L,NC]

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