只需使用.htaccess获取页面名称

时间:2014-12-02 23:14:41

标签: php apache .htaccess mod-rewrite

我尝试使用.htaccess来获取页面名称。例如,给出以下内容:

domain.com/pagename.php
domain.com/dir/pagename.html
domain.com/dir/dir/pagename.htm
domain.com/pagename.php?param=abc
domain.com/dir/pagename.asp?param=abc
domain.com/dir/dir/pagename.php?param=abc

我想要隔离pagename,但仍保留原始网址。我想使用参数filename=$1将其传递给PHP。因此,上述所有内容的输出(分别)将是:

domain.com/pagename.php?filename=pagename
domain.com/dir/pagename.html?filename=pagename
domain.com/dir/dir/pagename.htm?filename=pagename
domain.com/pagename.php?param=abc?filename=pagename
domain.com/dir/pagename.asp?param=abc?filename=pagename
domain.com/dir/dir/pagename.php?param=abc?filename=pagename

我尝试使用以下RewriteRule:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.+)\.(.+) $1/$2.$3?filename=$2 [QSA]

我认为应该在$ 1中获取零个或多个目录,在$ 2中获取文件名,在$ 3中获取扩展名。

2 个答案:

答案 0 :(得分:0)

尝试:

RewriteRule ^([^\/]*\/)?([^\/]*\/)?([a-z]+)\.([a-z]{3,4}) $1$2$3.$4?filename=$3 [QSA]

答案 1 :(得分:0)

您可以使用:

RewriteRule ^((?:.+/)*(.+?)\.[a-z0-9]{3,4})$ $1?filename=$2 [NC,QSA,L]

没有RewriteCond,因为它们是真实的文件