htaccess用于干净的URL而不需要对变量进行硬编码

时间:2015-03-09 14:48:13

标签: .htaccess mod-rewrite url-rewriting apache2 clean-urls

我正在尝试从以下内容重写URL:

http://www.domain.com/index.php/service/variable1/value/variable2/value ....一直到8个变量。

对此:

http://www.domain.com/index.php?pagekey=service&variable1=value&variable2=value ....一直到8个变量。

变量将在页面之间发生变化,因此我无法在重写规则中对它们进行硬编码。变量和值都需要是htaccess变量。

我有以下htaccess代码在Apache 2.2.9(debian)上完美运行,但相同的代码DOESNT在apache 2.2.16(debian)或apache 2.2.22(debian)上工作

任何人都有任何想法,为什么会这样?

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{DOCUMENT_ROOT}/$1 -f
RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif|php))$ /$1 [L,R=301,NC]

RewriteRule ^index/(.*)$ index.php?pagekey=$1
RewriteRule ^index.php/(.*)$ index.php?pagekey=$1

RewriteRule ^index/(.*)/(.*)/(.*)$  index.php?pagekey=$1&$2=$3
RewriteRule ^index.php/(.*)/(.*)/(.*)$  index.php?pagekey=$1&$2=$3

RewriteRule ^index/(.*)/(.*)/(.*)/(.*)/(.*)$  index.php?pagekey=$1&$2=$3&$4=$5
RewriteRule ^index.php/(.*)/(.*)/(.*)/(.*)/(.*)$  index.php?pagekey=$1&$2=$3&$4=$5

RewriteRule ^index/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$  index.php?pagekey=$1&$2=$3&$4=$5&$6=$7
RewriteRule ^index.php/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$  index.php?pagekey=$1&$2=$3&$4=$5&$6=$7

RewriteRule ^index/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$  index.php?pagekey=$1&$2=$3&$4=$5&$6=$7&$8=$9
RewriteRule ^index.php/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$  index.php?pagekey=$1&$2=$3&$4=$5&$6=$7&$8=$9

1 个答案:

答案 0 :(得分:0)

您可以使用这3个通用规则

处理所有这些组合
RewriteEngine On
RewriteBase /

RewriteRule ^(index)(?:\.php)?/([^/]+)/?$ $1.php?pagekey=$2 [L,NC,QSA]

RewriteRule ^(index)(?:\.php)?/([^/]+)/([^/]+)/([^/]+)/?$ $1.php?pagekey=$2&$3=$4 [L,NC,QSA]

RewriteRule ^(index)(?:\.php)?/([^/]+)/([^/]+)/([^/]+)(/.*)?$ $1.php/$2$5?$3=$4 [L,NC,QSA]