在我的网站上有一个指向注册导师的链接。该链接是这样的
http://www.myweb.com/profiles/tutors/index.php?tutorCode=1285&tutorName=Robert%20Sakoo&city=Sidny
因此,我需要重写此链接,如下所示:

www.myweb.com/1285/Rober Sakoo

有人可以告诉我是否可以将上述原始URL重写为我的预期URL?

最佳答案

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

  • 有人在地址栏中输入 this2 或单击 this2 链接。
  • 服务器看到对 this2
  • 的请求
  • Server 内部有一套规则,将请求从 this2 改写为 this1
  • this1 提供给浏览器

  • 请注意,所有这些中的重要概念是 浏览器请求“this2”链接 ,而 服务器内部将请求重写为“this1” 。但这可能根本不是你想要的,因为那样你就会把丑陋的 URL 重写为漂亮的 URL,有点错过了看起来友好的 URL。

    很多时候,尤其是在这里,人们要求诸如“我想将此 url 更改为此 url”之类的内容,或者在有两步重定向过程时要求重写。这是第 2 步(您根本不需要),它将 this1 并将浏览器重定向到 this2 以便 url 地址栏更改为 this2 :
  • 有人在地址栏中输入 this1 或单击 this1 链接。
  • 服务器看到对 this1
  • 的请求
  • Server 有一组规则可以将浏览器从外部重定向到 this2
  • 浏览器地址栏现在显示 this2
  • 浏览器请求 this2
  • 服务器看到对 this2
  • 的请求
  • Server 内部有一套规则,将请求从 this2 改写为 this1
  • 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/ ,这种修改应该是微不足道的。

    关于.htaccess - 将原始网址转换为友好网址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11709634/

    10-13 03:41