.htaccess :带有任意数量+参数名称的漂亮 URL

问题描述 投票:0回答:1


你好 ! 我知道已经有很多关于 URL 重写的主题,老实说我发誓我已经花了很多时间尝试将它们应用于我的问题,但我看不到它们中的任何一个完美地应用于我的情况(如果您发现其他情况) ,请给出链接)。 -----

问题来了:

我正在学习 MVC 模型和 URL 重写,我的 URL 是这样的:

http://localhost/blahblahblah/mywebsite/index.php?param1=value1&param2=value2&param3=value3 ... etc ...

我想要的(对于某些 MVC 模板目标)是拥有这种 URL :

http://localhost/blahblahblah/mywebsite/value1/value2/value3 ... etc ...

-----

Whatever 是参数名称,whatever 是值。
这是最本质的事情,我找不到解决方案。

(也不要介意本地主机等等,这甚至在遥远的网站上也必须工作,但我相信它会在在线网站上正常工作,这部分 URL 可能对我想做的事情并不重要)

非常感谢您的宝贵时间,如果您能帮助我更清楚地了解我需要做什么。

apache .htaccess web url rewriting
1个回答
2
投票

如果

.htaccess
文件位于文档根目录中(即有效地位于
http://localhost/.htaccess
),那么您需要使用 mod_rewrite 执行如下操作:

RewriteEngine On

RewriteRule ^(blahblahblah/mywebsite)/(\w+)$ $1/index.php?param1=$2 [L]
RewriteRule ^(blahblahblah/mywebsite)/(\w+)/(\w+)$ $1/index.php?param1=$2&param2=$3 [L]
RewriteRule ^(blahblahblah/mywebsite)/(\w+)/(\w+)/(\w+)$ $1/index.php?param1=$2&param2=$3&param3=$4 [L]
# etc.

其中

$n
是对前面
RewriteRule
pattern(第一个参数)中相应捕获组的反向引用。

\w
是一个速记字符类,与
a-z
A-Z
0-9
_
(下划线)匹配。

每个参数都需要一个新指令。您可以将它们组合成一个(复杂)指令,但是当仅传递几个参数时(而不是根本不传递这些参数),您将有很多empty参数。

我假设您的网址不以斜杠结尾。

但是,如果

.htaccess
文件位于
/blahblahblah/mywebsite
目录中,那么指令可以稍微简化一下:

RewriteRule ^(\w+)$ index.php?param1=$1 [L]
RewriteRule ^(\w+)/(\w+)$ index.php?param1=$1&param2=$2 [L]
RewriteRule ^(\w+)/([\w]+)/([\w]+)$ index.php?param1=$1&param2=$2&param3=$3 [L]
# etc.

不要使用 URL 参数(替代方法)

另一种方法是不将路径段转换为

.htaccess
中的 URL 参数,而是将所有内容传递给
index.php
并让 PHP 脚本将 URL 拆分为参数。这允许任意数量的参数。

例如,您的

.htaccess
文件将变得更加简单:

RewriteRule ^\w+(/\w+)*$ index.php [L]

(假设

.htaccess
文件位于
/blahblahblah/mywebsite
目录中,否则您需要像上面一样添加必要的目录前缀。)

RewriteRule
pattern只是验证请求URL的形式为
/value1
/value1/value2
/value1/value2/value3
等。并且请求被重写为
index.php
(前端控制器)来处理一切。

然后在

index.php
中检查
$_SERVER['REQUEST_URI']
并解析请求的 URL。

© www.soinside.com 2019 - 2024. All rights reserved.