将 mysite.com/app.php?appname=example-name&appid=numeric-id 重写为 mysite.com/app/app-name/numeric-id/

Rewrite mysite.com/app.php?appname=example-name&appid=numeric-id to mysite.com/app/app-name/numeric-id/

我是 PHP 和服务器端操作的新手,所以在这里问这个基本问题。我在这里找到了很多类似的问题和答案,但我没有达到我想要的。我如何编写我的 htaccess 文件来产生这些结果?

动态URL:

mysite.com/app.php?appname=example-name&appid=numeric-id

URL我要:

mysite.com/app/example-name/numeric-id

在您的 .htaccess 文件中试试这个

RewriteEngine On
RewriteRule ^app/(.*)/(.*)/?$ /app.php?appname=&appid= [QSA,NC,L]

编辑:

 RewriteEngine On
 RewriteCond %{THE_REQUEST} app\.php\?appname=(.*?)&appid=([0-9]+) [NC]
RewriteRule ^ /app/%1/%2? [R=302,L]

RewriteRule ^app/(.*)/([0-9]+)/?$ /app.php?appname=&appid= [L,QSA]

改写

http://mysite.com/app.php?appname=example-name&appid=numeric-id

http://mysite.com/app/example-name/numeric-id

您可以使用这些规则:

RewriteEngine on
RewriteCond %{QUERY_STRING} appname=([^?&]+)&appid=([^?&]+) [OR,NC]
RewriteCond %{QUERY_STRING} appid=([^?&]+)&appname=([^?&]+) [NC]
RewriteRule ^app\.php.*$ /app/%1/%2? [R=301,L]

这些规则捕获您想要的查询字符串参数,然后按照它们被捕获的顺序在重写中使用它们。如果参数的顺序被切换,有两种情况。尾随问号 (?) 从重写的输出中删除原始查询字符串。

301重定向提示:

如果您过去的 .htaccess 规则包含 301 重定向(301 = 永久),即使它不正确,您的浏览器也会缓存该重定向并且不会查询 .htaccess URL.

为了测试,使用 302 重定向,然后当您满意时切换到 301。如果为时已晚,请尝试在您的请求中添加另一个参数以暂时绕过此,例如:

app.php?appname=example-name&appid=numeric-id &nonce=1234

或者,清除浏览器缓存,或者使用 ingocnito window.