【问题标题】:htaccess rewrite rule for affiliate id会员ID的htaccess重写规则
【发布时间】:2017-06-22 06:38:19
【问题描述】:

我的网站只是 index.php,每个页面都是从中读取的。我没有使用 WordPress。

我想要做的是与 WordPress 对其页面结构所做的相同的事情。在 Wordpress 中,您可以设置重写规则,以便后续子目录可以将值传递给 index.php

我有一个正在建立联盟网络的客户,例如,基本 URL 是:

mywebsite.com/?id=viktor 

他们想改为解析 URL,以便对客户来说更简单。

mywebsite.com/u/viktor 将“重写”为 mywebsite.com/?id=viktor

.htaccess 规则或相关的 PHP 我必须放入 index.php 是什么?

显然,我们不会在站点中包含“u”文件夹。 :)

感谢您的帮助。

This related question I believe has the code we're looking for however I'm not sure how it would apply in this situation

【问题讨论】:

  • 会员ID是什么格式?重写应该总是把用户带回mywebsite.com主页,还是他们通过传递URL参数请求的页面?
  • 这是一个用户名,例如 id=viktor 但是我们不希望它重定向。加入书签后,它仍然显示为 mywebsite.com/u/viktor 并将 id 变量传递给 index.php

标签: php apache .htaccess mod-rewrite


【解决方案1】:

你可以这样做:

RewriteEngine On
RewriteRule ^u/(.+)$ /?id=$1 [NE,L]

如果您还需要保留任何现有的查询字符串(如/u/viktor?param=value),请使用:

RewriteEngine On
RewriteRule ^u/(.+)$ /?id=$1 [NE,QSA,L]

更新

使用相对 URL 是不好的做法(出于这个原因),但如果您真的想避免更新所有代码(这可以通过脚本或命令轻松完成),您可以这样做:

RewriteEngine On
RewriteRule ^u/(.+/.+) /$1 [NE,L]
RewriteRule ^u/(.+)$ /?id=$1 [NE,QSA,L]

这会将/u/ 下文件夹中引用的所有内容重写为root。但它会破坏浏览器缓存,因为您的所有资源现在都有两个 URL。真的,您应该将您的网址更新为绝对网址。

如果上述方法不适合您并且您只想重写特定文件夹,请这样做:

RewriteEngine On
RewriteRule ^u/((?:assets|images|css)/.+) /$1 [NE,L]
RewriteRule ^u/(.+)$ /?id=$1 [NE,QSA,L]

根据需要替换文件夹名称。

【讨论】:

  • 这行得通,但是 UNIX 仍将 CSS 即 href="assets/css/custom-animations.css" 视为“u”文件夹内,因此不会绝对引用图像。我们必须进入并重做每一行代码,包括并添加 / 到它。有没有办法重写规则,但仍然将“目录”移回根目录,即使我们放置了 /u/ - 请参阅 ufunnel.net/u/earthgrid - 您可以看到 CSS 并且所有内容都没有加载,因为它认为它在“你”文件夹。我们很接近了!!!!!!
  • 有没有比将每个文件和页面的所有相对引用修改为绝对值更简单的方法?例如 - 当你重写时 - 也返回一个目录,即 ../ 用于所有引用。这是一个心灵弯曲!感谢您的帮助!
  • 我添加了关于此的更新。不是 UNIX 这么看,而是 Web 浏览器。
【解决方案2】:

Viktor,您遇到的问题是 WordPress 在处理请求时会检查 原始 URL。这是因为它有自己的 mod_rewrite 规则将所有内容重写为index.php

所以你不能用 mod_rewrite 做你想做的事,因为 WordPress 不会查看你重写的 URL,并将其处理为 /u/viktor。你可以通过 301 重定向来做到这一点,但你已经说过你不想这样做。

为了使这项工作正常工作,您需要使用 WordPress 使这些 URL 工作,也许创建一个插件来做到这一点。我不建议向 WordPress 的 index.php 添加任何内容,因为它只会在 WordPress 更新时被覆盖。

【讨论】:

  • OP 没有使用 Wordpress,他们只是想做一些 Wordpress 正在使用的事情。
  • 所以我现在看到问题已更新 :) 感谢您的提醒。
猜你喜欢
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多