我有一个index.php处理所有的路由index.php?page=controller(简化)只是为了将逻辑与视图分开。
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w\d~%.:_\-]+)$ index.php?page=$1 [NC]
字符串
基本上就是:http://localhost/index.php?page=controller至
http://localhost/controller/的
谁能帮我添加重写
http://localhost/controller/param/value/param/value(等等)
这将是:
http://localhost/controller/?param=value¶m=value的
我不能让它和重写规则一起工作。
一个控制器可能看起来像这样:
<?php
if (isset($_GET['action'])) {
if ($_GET['action'] == 'delete') {
do_Delete_stuff_here();
}
}
?>
型
还有:
<?php
if (isset($_GET['action']) && isset($_GET['x'])) {
if ($_GET['action'] == 'delete') {
do_Delete_stuff_here();
}
}
?>
型
8条答案
按热度按时间hl0ma9xz1#
基本上,人们试图说的是,你可以这样做一个重写规则:
字符串
这将使您的实际php文件如下所示:
型
你的URL应该是这样的:
型
在你的PHP文件中,你可以通过像这样展开来访问你的参数:
型
xa9qqrwz2#
我认为最好将所有请求重定向到index.php文件,然后使用php提取控制器名称和任何其他参数。与其他框架一样,如Zend Framework。
这是一个简单的类,可以做你想要的。
字符串
使用方法:
型
.htaccess文件:
型
rt4zxlrg3#
重写规则将传递整个URL:
字符串
你的index.php会将完整路径解释为controller/param/value/param/value(我的PHP有点生疏):
型
mkh04yzy4#
重定向到
index.php?params=param/value/param/value
,让php拆分整个$_GET['params']
怎么样?我认为这是WordPress处理它的方式。a9wyjsp75#
出于某种原因,选择的解决方案对我不起作用。它将始终只返回“index.php”作为参数的值。
经过一些尝试和错误,我发现下面的规则工作得很好。假设您希望yoursite.com/somewhere/var1/var2/var3指向yoursite.com/somewhere/index.php?params= var 1/var 2/var 3,然后将以下规则放置在“somewhere”目录下的.htaccess文件中:
字符串
然后,在PHP或您选择的任何语言中,只需使用@Wesso指出的explode命令将值分开。
出于测试目的,这在index.php文件中应该足够了:
型
fcy6dtqo6#
这是你要找的吗
这个例子演示了如何使用循环标志轻松隐藏查询字符串参数。假设您有一个类似http://www.mysite.com/foo.asp?a=A&b=B&c=C的URL,并且希望以http://www.myhost.com/foo.asp/a/A/b/B/c/C的身份访问它
尝试以下规则以获得预期结果:
第一个月
dhxwm5r47#
你确定你使用的是Apache服务器,.htaccess只在Apache服务器上工作。如果你使用的是IIS,那么需要web.config。在这种情况下:
字符串
w8ntj3qf8#
使用QSA
blabla.php?originialquery=333 RewriteRule ^blabla.php index.php?addnewquery1=111&addnewquery2=222 [L,NC,QSA]您将获得所有111,222,333