我想要一个URL,它给我一个查询字符串,其中包含给定顺序的输入,并以规范格式放置查询字符串的值。例如......
www.example.com/?name=me&value=you&where=here
变为
www.example.com/Connects/me/you/here
我尝试了一些mod_rewrites但是我很难让它工作。我不知道如何查询基本URL之后的查询 - 也许我不必做任何事情。无论如何,这是我尝试过的事情之一。
RewriteCond %{QUERY_STRING}
RewriteRule ^/ /Connects/%1/%2/%3/%4/%5/%6 [L]
答案 0 :(得分:0)
不确定我是否理解得很好,但就是这样:
RewriteRule ^Connects/([^/]+)/([^/]+)/([^/]+)$ /?name=$1&value=$2&where=$3 [L]
答案 1 :(得分:0)
您需要匹配查询字符串本身:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^name=(\w+)&value=(\w+)&where=(\w+)
RewriteRule .* /Connects/%1/%2/%3? [L]
...虽然如果您的规范网址重新映射到具有这些参数的实际网页,您最终可能会以无限递归的方式结束 - 请小心!
答案 2 :(得分:0)
这是不好的做法。你的路由规则必须在php文件中,而不是在htaccess中。
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
<?php
# /Connects/me/you/here
$uri = $_SERVER['REQUEST_URI'];
$parts = explode('/', $uri);
// Array(0=>'', 1=>'Connects', 2=>'me', 3=>'you', 3=>'here')
if( '/Connects/me/you/here' === $uri ) {
echo "Connects page!";
}
if( '/home' === $uri ) {
echo "Home!";
}
框架使用Routes
来捕获REQUEST_URI
结构并为此路由调用Controller或Closure函数。
答案 3 :(得分:0)
您可能想要重新解释这个问题,因为您似乎在询问SEO-Friendly URLs,但使用的术语“规范”是指consolidation of URLs for SEO purposes.
顺便说一句,从第一个链接开始,您可以找到您可能想要使用的“捕获”功能。
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^products/([a-zA-Z]+)/([0-9]+)/$ index.php?product=$1&price=$2
此“捕获”功能是您想要使用的功能。
所以,对于
www.example.com/?name=me&value=you&where=here
你想要像这样捕捉:
www.example.com/?name=$1&value=$2&where=$3
然后,使用括号输出这些捕获。
RewriteRule ^Connects/([a-zA-Z]+)/([a-zA-Z]+)/([a-zA-Z]+)$ www.example.com/?name=$1&value=$2&where=$3
值得注意的是,我将此格式化为假设您只希望这些是字母字符。您需要根据可以接受的值进行自定义。