htaccess用于多个可选参数

时间:2012-02-29 17:22:57

标签: regex .htaccess mod-rewrite

我的任务是实现

http://localhost/projectname/media/video

来自

http://localhost/projectname/index.php?m=media&cmd=video

以及

http://localhost/projectname/home

http://localhost/projectname/index.php?m=home

文件下方有助于实现我的使命

RewriteRule ^([^/]*)$ /projectname/index.php?m=$1 
RewriteRule ^([^/]*)/([^/]*)$ /projectname/index.php?m=$1&cmd=$2 

事情是任何外部文件,如javascript和css都不会被使用。

我知道我的另一种选择就是把它作为htaccess

RewriteRule ^([^/]*)/cmd/([^/]*)$ /projectname/index.php?m=$1&cmd=$2 

启用http://localhost/projectname/media/cmd/video

我想在没有CMD的情况下做到这一点。有什么建议?

2 个答案:

答案 0 :(得分:2)

将规则更改为:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/?$ projectname/index.php?m=$1&cmd=$2 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/?$ projectname/index.php?m=$1 [L,QSA]

并确保您的js,css,图像文件使用绝对路径而不是相对路径。这意味着他们的路径应该以{{1​​}}或http://开头。

答案 1 :(得分:1)

为什么不将所有内容传递给index.php然后处理/解析路径,例如

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

然后使用

$_SERVER['PATH_INFO']
$_SERVER['ORIG_PATH_INFO']
$_SERVER['QUERY_STRING']

http://php.net/manual/en/reserved.variables.server.php