将原始网址转换为友好网址

时间:2012-07-29 13:31:26

标签: .htaccess

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

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

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

www.myweb.com/1285/Rober Sakoo

有人可以告诉我是否可以将原始网址重写为我预期的网址?

2 个答案:

答案 0 :(得分:13)

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

  1. 有人在地址栏中输入 this2 或点击 this2 链接。
  2. 服务器会看到 this2
  3. 的请求
  4. 服务器有一套规则,可以在内部将请求从 this2 重写为 this1
  5. this1 会投放到浏览器
  6. 请注意,所有这一切中的重要概念是浏览器请求“this2”链接服务器在内部将请求重写为“this1”。但这可能不是你想要的,因为那样你就会把丑陋的URL重写成漂亮的URL,而不是那些看起来很友好的URL。

    很多时候,尤其是在这里,人们会问“我想将此网址更改为此网址”,或者在有两步重定向过程时要求重写。这是第2步(你根本不需要),它将 this1 重定向浏览器转移到 this2 ,以便网址地址栏更改为 this2

    1. 有人在地址栏中输入 this1 或点击 this1 链接。
    2. 服务器会看到 this1
    3. 的请求
    4. 服务器有一组规则,将浏览器外部重定向 this2
    5. 浏览器的地址栏现在显示 this2
    6. 浏览器请求 this2
    7. 服务器会看到 this2
    8. 的请求
    9. 服务器有一套规则,可以在内部将请求从 this2 重写为 this1
    10. this1 会投放到浏览器
    11. 因此,整个回合卷积只是 所以当浏览器尝试转到 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中编码,因此它将作为查询字符串的一部分保留。您可以更改此设置,以便友好的网址如下所示:/id/name/city/而不仅仅是/id/name/,修改应该是微不足道的。

答案 1 :(得分:1)

那可能就在附近:

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

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