Mod将具有查询字符串的重定向URL重写为漂亮的URL

时间:2012-07-24 11:29:14

标签: .htaccess mod-rewrite

我成功地使用查询字符串中的几个参数从丑陋的URL中更改了我的URL,以便在mod重写的帮助下清理看起来的URL。但是,我的网站有很多网址。我没有回去编辑每个锚标签上的href属性,而是尝试在.htaccess文件中编写一个重定向函数,自动将旧网址重定向到新网址。

在我的.htaccess文件中,我有以下内容:

RewriteEngine On

Redirect teams.php?league=$1&team=$2&year=$3&tab=$4 teams/(.*)/(.*)/(.*)/(.*)

RewriteCond %{REQUEST_URI} !^(css|js|img)/
RewriteRule ^teams/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ teams.php?league=$1&team=$2&year=$3&tab=$4 [L]

虽然没有运气......有什么想法吗?

由于

1 个答案:

答案 0 :(得分:4)

您需要通过与php匹配来检查实际上正在请求中的%{THE_REQUEST}的旧网址,否则它将永远重定向循环(例如,用户访问team.php,服务重定向到团队,浏览器请求团队,服务器重写为teams.php,服务器看到“teams.php”并重定向到团队,浏览器请求团队,服务器重写为teams.php等。 。)

RewriteEngine On

# redirect when the user actually requests for teams.php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /teams\.php\?league=([^&]+)&team=([^&]+)&year=([^&]+)&tab=([^\ ]+)
RewriteRule ^teams\.php$ /teams/%1/%2/%3/%4? [R=301,L]

# internally rewrite any /teams/ URI
RewriteCond %{REQUEST_URI} !^(css|js|img)/
RewriteRule ^teams/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ teams.php?league=$1&team=$2&year=$3&tab=$4 [L]