.htaccess mod_rewrite 301使用模式重定向

时间:2011-11-17 11:30:05

标签: .htaccess url mod-rewrite

我已更改网址结构,以从商品页面的网址中删除该类别。

我需要一些方法使用mod_rewrite将所有旧页面重定向到新页面。我已经有了一个非常精细和杂乱的.htaccess文件。

我需要的是重定向: 对此http://example.com/category-name/item-name/

http://example.com/download-item-name/

现在,我已经在htaccess文件中找到了这个。

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301]
RewriteRule ^download-([^/]*)/screenshots/$ /screenshots.php?screenshots=$1 [L]
RewriteRule ^download-([^/]*)/screenshots/([^/]*)/$ /screenshots.php?screenshots=$1&shot=$2
#and now without trailing slash, so request will hit script which can do redirect.
RewriteRule ^download-([^/]*)/screenshots/([^/]*)$ /screenshots.php?screenshots=$1&shot=$2 [L]
RewriteRule ^feed/([^/]*)/$ /feed/?category=$1 [L]
RewriteRule ^download-([^/]*)-software/$ /category.php?category=$1 [L] 
#this needs to stay above the below rule
RewriteRule ^download-([^/]*)/$ /software.php?shortname=$1 [QSA]

RewriteRule ^download-([^/]*)/([^/]*)/$ /software.php?shortname=$1&lang=$2 [QSA]

#and now without trailing slash, so request will hit script which can do redirect.
RewriteRule ^download-([^/]*)$ /software.php?shortname=$1 [QSA]

RewriteRule ^download-([^/]*)/([^/]*)$ /software.php?shortname=$1&lang=$2

RewriteRule ^downloading/([^/]*)/$ /download.php?downloading=$1
RewriteRule ^downloading/([^/]*)/([^/]*)/$ /download.php?downloading=$1&lang=$2 [L]
RewriteRule ^download/([^/]*)/([^/]*)/$ /send.php?key=$1&s=$2 [QSA]
RewriteRule ^FQ-([^/]*)/$ /content.php?page=$1 [L]
RewriteCond %{REQUEST_URI} ^(/[^/]+)(/.*)?$
RewriteCond %{DOCUMENT_ROOT}/categories%1/ -d
RewriteRule . /categories%{REQUEST_URI} [QSA]
Options -Indexes
FileETag None
ErrorDocument 404 http://example.com/404/
ErrorDocument 403 http://example.com/

#Some redirects
Redirect 301 /audio-video-players-codecs/zoom-player-max/ http://example.com/download-zoom-player-max/
Redirect 301 /audio-video-players-codecs/zoom-player-premium/ http://example.com/download-zoom-player-premium/
Redirect 301 /audio-video-players-codecs/zoom-player-pro/ http://example.com/download-zoom-player-pro/

1 个答案:

答案 0 :(得分:1)

你的.htaccess因为简单的事情而变得混乱:

规则#1:避免混合使用RedirectRewriteRules指令。这只会让事情变得混乱。 总是可以用Redirect指令替换RewriteRules

规则#2:如果您不需要RewriteBase /(通常是这种情况,因为基数通常是/),请不要写它。这只会让事情变得混乱。越短越好(这就是她告诉我的(只是kiddin'))。

规则#3:^(.*)$ (.*) 相同。在这里,这也使事情变得更加清晰。

规则#4::特殊规则:您可以使用类似^downloading/([^/]*)(/([^/]*))?/之类的东西将所有RewriteRules减少2,这使得第二个参数为空,但是匹配一个或两个参数(在你的Php中有效,你可以得到一个空的第二个参数)。越短越好。

然后回答您的问题:将http://example.com/category-name/item-name/重定向到此http://example.com/download-item-name/

RewriteRule ^category-([a-zA-Z]+)/item-([a-zA-Z]+)/ ^download-item-$2/ [QSA,R]

这应该有效


我最喜欢检查regexp的工具:

http://www.quanetic.com/Regex(别忘了选择ereg(POSIX)而不是preg(PCRE)!)

相关问题