关联联盟ID的htaccess重写规则

时间:2017-06-21 15:58:09

标签: php apache .htaccess mod-rewrite

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

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

我有一个正在构建联盟网络的客户端,基本URL就是:

mywebsite.com/?id=viktor 

他们希望解析网址,以便让客户更加轻松。

即。 mywebsite.com/u/viktor会重写'到mywebsite.com/?id=viktor

.htaccess规则或关联的PHP必须放入index.php

显然我们没有“你好”。网站中的文件夹。 :)

感谢您的帮助。

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

2 个答案:

答案 0 :(得分:2)

你可以这样做:

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

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

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

<强>更新

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

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]

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

答案 1 :(得分:1)

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

因此,您无法使用mod_rewrite执行所需操作,因为WordPress不会查看您重写的网址,并会将其作为/u/viktor进行处理。你可以通过301重定向来实现,但你已经说过你不想这样做。

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