RewriteRule将缺少的参数添加到URL Path

时间:2016-01-11 19:31:35

标签: regex apache .htaccess mod-rewrite url-rewriting

我想使用RewriteRule更改格式的网址

http://server.com/srv/index.php/12345/somedynamichash/somedynamichash/somedynamichash

其中/srv/index.php/12345/对于格式的网址是静态的:

http://server.com/srv/index.php/12345/XXXX/somedynamichash/somedynamichash/somedynamichash

当且仅当请求中缺少XXXX时。

这两个

RewriteRule "^/(srv/index\.php/\d+/)(?!XXXX(?:$|/))(.*)" "$1XXXX/$2" [R]

也不是这个组合

RewriteRule ^/srv/index\.php/(\d+)/(XXXX/.*)$ srv/index.php/$1/$2 [L]
RewriteRule ^/srv/index\.php/(\d+)/(.*)$ srv/index.php/$1/XXXX/$2 [L]

的工作。

2 个答案:

答案 0 :(得分:1)

RewriteCond是解决方案。只有当$ 1与XXXX不匹配时,它才会应用RewriteRule:

RewriteEngine on
RewriteCond "$1"    "!^XXXX$"
RewriteRule "^/srv/index.php/12345/([^/]+)/(.*)$" "http://localhost/srv/index.php/12345/XXXX/$1/$2"   

答案 1 :(得分:0)

此规则应该适用于站点根目录.htaccess或Apache config:

RewriteEngine On

RewriteRule ^/?(srv/index\.php/\d+)/(?!XXXX(?:/.*)?$)(.*)$ /$1/XXXX/$2 [L,NC,R=302,NE]
相关问题