7

在我的网站上有一个注册导师的链接。该链接是这样的

http://www.myweb.com/profiles/tutors/index.php?tutorCode=1285&tutorName=Robert%20Sakoo&city=Sidny

所以我需要像这样重写这个链接:

www.myweb.com/1285/Rober Sakoo

谁能告诉我是否可以将上面的原始 URL 重写为我预期的 URL?

4

2 回答 2

16

您似乎对 URL 和重写的工作方式感到困惑。“我需要将 this2 重写为 this1概念意味着:

  1. 有人在他们的地址栏中输入this2或单击this2链接。
  2. 服务器看到对此的请求2
  3. 服务器有一套规则在内部将请求从this2重写为this1
  4. this1提供给浏览器

请注意,所有这一切的重要概念是浏览器请求“this2”链接服务器内部将请求重写为“this1”。但这可能根本不是您想要的,因为那样您将采用丑陋的 URL 并将它们重写为外观漂亮的 URL,从而错过了外观友好的 URL。

很多时候,尤其是在这里,人们会要求诸如“我想将此 url 更改为此 url”之类的东西,或者在有 2 步重定向过程时要求重写。这是第二步(您根本不需要),它采用this1并将浏览器重定向this2以便 url 地址栏更改为this2

  1. 有人在他们的地址栏中输入this1或单击this1链接。
  2. 服务器看到对此的请求1
  3. 服务器有一组规则将浏览器外部重定向this2
  4. 浏览器的地址栏现在显示this2
  5. 浏览器请求this2
  6. 服务器看到对此的请求2
  7. 服务器有一套规则在内部将请求从this2重写为this1
  8. this1提供给浏览器

因此,整个循环卷积就是浏览器尝试访问this1时,它会被重定向到this2但实际上仍会从this1获得内容。

所以我认为这一定是你想要的。尝试将其放入您的 htaccess 文件中:

RewriteEngine On

# check if the actual request if for "this1"
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /profiles/tutors/index.php\?tutorCode=([0-9]+)&tutorName=([^&]+)&?([^\ ]+)
# redirect to "this2"
RewriteRule ^profiles/tutors/index\.php /%1/%2/?%3 [R=301,L,NE]

# now rewrite "this2" back to "this1"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)/(.+)/$ /profiles/tutors/index.php?tutorCode=$1&tutorName=$2 [L,QSA]

请注意,该city参数永远不会在友好 URL 中进行编码,因此它作为查询字符串的一部分保留。您可以更改它,使友好的 URL 看起来像:/id/name/city/而不是只是/id/name/,该修改应该是微不足道的。

于 2012-07-29T18:46:08.120 回答
1

那将是附近的某个地方:

RewriteEngine on
RewriteRule ^([0-9]+)/(.+)$ /profiles/tutors/index.php?tutorCode=$1&tutorName=$2 [NC,QSA]

由于您没有指定如何处理它,因此我没有考虑您的city参数,因此将QSA(查询字符串附加)添加到规则中,因此 GET 中的参数仍会传递给脚本。

于 2012-07-29T13:40:25.743 回答