htaccess代码分解和一些解释

时间:2014-08-08 10:16:16

标签: php apache .htaccess mod-rewrite

我有以下.htaccess文件代码

RewriteEngine On
RewriteBase /claimspro/

##-----Establish a custome 404 File not Found Page---
ErrorDocument 404 /claimspro/filenotfound.php

##-----Prevent Directory File listing in all folder---
IndexIgnore *

RewriteCond %{THE_REQUEST} ([A-Za-z0-9]+)\.php\?caseid=([0-9]+)&?([^\ ]*)
RewriteRule ^ %1/caseid/%2/?%3 [L,R]
RewriteRule ^([A-Za-z0-9]+)/caseid/([0-9]+)/ $1.php?caseid=$2 [L,QSA]

RewriteCond %{THE_REQUEST} ([A-Za-z0-9]+)\.php
RewriteRule ^ %1/?%2 [L,R]
RewriteRule ^([A-Za-z0-9]+)/ $1.php [L,QSA]

上面的代码按我希望的方式工作。它会将此localhost/claimspro/afile.php?caseid=11的网址更改为localhost/claimspro/afile/caseid/11/

但是当我通过以下方式添加另一个参数,即/ caseid / 11 / picid / 12 /时,它表现得非常奇怪。

我是否可以要求对代码进行一些解释,以便能够得到一些对我有利的结果。

RewriteCond %{THE_REQUEST} ([A-Za-z0-9]+)\.php\?caseid=([0-9]+)&?([^\ ]*)
RewriteRule ^ %1/caseid/%2/?%3 [L,R]

首先,如果我可以问第一行末尾的内容(上图)&?([^\ ]*)我将如何修改此内容以添加其他参数,例如RewriteCond %{THE_REQUEST} ([A-Za-z0-9]+)\.php\?caseid=([0-9]+)\&picid=([0-9]+)\&?([^\ ]*)。如果你能解释一下我在这里做错了什么,我该怎么办呢。

其次这一行RewriteRule ^ %1/caseid/%2/?%3 [L,R]这个%3代表什么是?%3 [L,R]

基本上我想在我的htaccess文件中添加一个参数以满足以下

localhost/claimspro/anotherfile.php?caseid=11&picid=22

我应该对我的代码添加哪些内容?

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

让我回答你的两个问题。

回答第一个问题:模式&?([^\ ]*)与查询字符串的其余部分(如果存在)匹配。

回答第二个问题:?%3 [L,R]将捕获的数据(来自第一个问题)作为查询字符串附加(R标志用于默认重定向302)。

如果我必须这样做,我就会这样写的

Options -Indexes
ErrorDocument 404 /claimspro/filenotfound.php

RewriteEngine On
RewriteBase /claimspro/

RewriteCond %{THE_REQUEST} /([^/]+)\.php\?caseid=([0-9]+)&picid=([0-9]+)\s [NC]
RewriteRule . %1/caseid/%2/picid/%3/? [R=301,L]

RewriteCond %{THE_REQUEST} /([^/]+)\.php\?caseid=([0-9]+)\s [NC]
RewriteRule . %1/caseid/%2/? [R=301,L]

RewriteCond %{THE_REQUEST} /([^/]+)\.php\s [NC]
RewriteRule . %1/? [R=301,L]

RewriteRule ^([^/]+)/caseid/([0-9]+)/picid/([0-9]+)/$ $1.php?caseid=$2&picid=$3 [L]
RewriteRule ^([^/]+)/caseid/([0-9]+)/$ $1.php?caseid=$2 [L]
RewriteRule ^([^/]+)/$ $1.php [L]

答案 1 :(得分:1)

我无法解释代码,因为我不是模式重写专家,您可以使用以下代码更改代码并且可以使用

RewriteEngine On
RewriteBase /claimspro/

#-----Establish a custome 404 File not Found Page---
ErrorDocument 404 /claimspro/filenotfound.php

#-----Prevent Directory File listing in all folder---
IndexIgnore *

RewriteCond %{THE_REQUEST} ([A-Za-z0-9]+)\.php\?caseid=([0-9]+)\&picid=([0-9]+)&?([^\ ]*)
RewriteRule ^ %1/caseid/%2/picid/%3/?%4 [L,R]
RewriteRule ^([A-Za-z0-9]+)/caseid/([0-9]+)/picid/([0-9]+)/ $1.php?caseid=$2&picid=$3 [L,QSA]

RewriteCond %{THE_REQUEST} ([A-Za-z0-9]+)\.php
RewriteRule ^ %1/?%2 [L,R]
RewriteRule ^([A-Za-z0-9]+)/ $1.php [L,QSA]

让我知道它是否有效

此致