htaccess和两个帖子参数

时间:2012-07-23 17:09:06

标签: php css model-view-controller .htaccess post

我为我的网站开发了一个小的自定义MVC框架。它是index.php检查$ _POST ['page']& $ _POST ['subpage']并包含指定参数的相关php文件。

例如: index.php?page =食品 (包括view / foods.php)

例如: index.php?page = foods& subpage = pizza (包括view / foods / pizza.php)

现在我想使用.htaccess清理我的URL。我尝试了几种传递第二个参数的方法。但我失败了。这很好用......

RewriteEngine on
RewriteRule ^([^/\.]+)?$ index.php?page=$1 [L]

但是当我试图传递第二个参数时它不能正常工作。这个改变了css / js / iamges路径。

RewriteEngine on
RewriteRule ^([^/\.]+)?$ index.php?page=$1

RewriteRule ^([^/\.]+)/([^/\.]+)?$ index.php?page=$1&sub=$2

3 个答案:

答案 0 :(得分:2)

如果您使用QSA(查询字符串Apend)标志,您只需将整个请求字符串传递给索引文件 -

  

QSA - 将原始请求网址中的任何查询字符串追加到重写目标中创建的任何查询字符串

所以你的规则看起来与此相似 -

RewriteRule %{REQUEST_FILENAME} !-d
RewriteRule %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]

在索引文件中,您可以使用斜杠.explode() -

$splitArr = explode('/',$_GET['uri']);

和/或使用内置的parse_url()函数 - http://www.php.net/manual/en/function.parse-url.php

  

parse_url - 解析网址并返回其组件

答案 1 :(得分:2)

此类型的大多数url-rewriters明确排除实际存在的文件/目录:

RewriteRule %{REQUEST_FILENAME} !-d
RewriteRule %{REQUEST_FILENAME} !-f

答案 2 :(得分:0)

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteRule ^public/(js|css|images)(/.*|$) - [L]
RewriteRule ^(.+)$ index.php?page=$1 [QSA,L]

最后我是怎么做到的!