3

在 mod rewrite 的帮助下,我成功地将我的 URL 从查询字符串中带有多个参数的丑陋 URL 更改为看起来干净的 URL。但是,我的网站有很多网址。我没有返回并编辑每个锚标记上的 href 属性,而是尝试在 .htaccess 文件中编写一个重定向函数,该函数自动将旧 URL 重定向到新 URL。

在我的 .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]

不过运气不好……有什么想法吗?

谢谢

4

1 回答 1

5

您需要通过匹配来检查其中包含的旧 URLphp实际上通过匹配来请求的%{THE_REQUEST},否则它将永远重定向循环(例如,用户转到 team.php,将重定向服务重定向到团队,浏览器请求团队,服务器重写为团队.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]
于 2012-07-24T17:47:47.273 回答