2015-04-06 54 views
1

我知道这个问题被问了很多次,但我没有得到适当的解决方案,我的状况可能是因为缺乏有关此代码的知识。删除php文件扩展名以及在目录格式有_GET参数

到目前为止,我使用下面的代码隐藏PHP文件的扩展名:

Options -MultiViews 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

,当我浏览过像这样的网址:http://example.com/solutionshttp://example.com/solutions.php它的工作原理相当不错。

但是,当我想使用的网址与_GET这样的:http://example.com/solutions/page_slug

其中page_slug_GET PARAM说?slug=page_slug ...然后在那个时候产生404没有发现error,因为它正在考虑page_slug作为solutions目录中的文件。

所以我想它应该把第一个参数中的URL作为文件名,然后最多两个PARAM,例如得到PARAM:http://example.com/solutions_file/param1_page_slug/param2_any_other_param_may_be_id

如果有两个以上的PARAM然后链接结构将是正常的例如,如果URL是这样的:

http://example.com/solutions_file/param1_page_slug/param2_any_other_param_may_be_id/param3_this_is_extra

这样的话我们的URL结构是这样的:

http://example.com/solutions_file?param1=page_slug&param2=any_other_param_may_be_id&param3=this_is_extra&param4=and_so_on

所以这就是我正在努力实现的目标,我如何实现这一目标?

回答

1

你需要为这些中的每一个特定的规则:

Options -MultiViews 
RewriteEngine On 

# for just the php extension 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^([^/]+)$ /$1.php [L] 

# for 1 param 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^([^/]+)/([^/]+)$ /$1.php?slug=$2 [L,QSA] 

# for 2 params 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ /$1.php?slug=$2&param2=$3 [L,QSA] 

# for 3 params 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)$ /$1.php?slug=$2&param2=$3&param3=$4 [L,QSA] 

等等

+0

感谢这个工作,超过3 PARAM我可以手动通过查询字符串。非常感谢 :) – 2015-04-06 08:02:43