mod_rewrite多个变量和子文件夹

时间:2012-11-18 03:24:37

标签: php url mod-rewrite

在我的网站上,我有多个这样的网址:

主页:

mysite.com
mysite.com/?content=about
mysite.com/?content=posts&page=2

子文件夹:

mysite.com/subsite/
mysite.com/subsite/?content=about
mysite.com/subsite2/?content=posts&page=2

我想把它们清理干净:

mysite.com/about/
mysite.com/posts/2

mysite.com/subsite/about/
mysite.com/subsite/posts/2

现在,我已经能够将mod_rewrite用于一个变量,以及其他一些简单的东西,但我不确定如何实现这一点。当我使用时:

RewriteRule ^([a-z]+)/([a-z0-9-]+)/?$ /?content=$1&page=$2 [L]

它将URL的各个部分识别为变量,但它也将子网站视为变量,并尝试为“内容”插入“子网站”。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

您可以调整现有规则以允许可选的子网站/ 子网站2 / 前缀,例如

RewriteRule ^(subsite/|subsite2/)?([a-z]+)/([a-z0-9-]+)/$   /$1?content=$2&page=$3 [L]

或者只是添加规则来处理现有规则之前的子网站,例如

RewriteRule ^(subsite/|subsite2/)([a-z]+)/([a-z0-9-]+)/$ /$1?content=$2&page=$3 [L]
RewriteRule ^([a-z]+)/([a-z0-9-]+)/?$ /?content=$1&page=$2 [L]

答案 1 :(得分:0)

我最终通过在.htaccess文件夹中放入另一个subsite文件来实现此目的。

.htaccess有:

RewriteEngine On
RewriteRule ^([A-Za-z0-9]+)/?$ ?a=b&content=$1 [L]
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)/?$ ?a=b&content=$1&page=$2 [L]

<小时/> 在子网站.htaccess中,我有:(与root .htaccess相同)

RewriteEngine On
RewriteRule ^([A-Za-z0-9]+)/?$ ?a=b&content=$1 [L]
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)/?$ ?a=b&content=$1&page=$2 [L]

如果您不需要更改子目录的网址,请仅将RewriteEngine On添加到子网站的.htaccess。这基本上覆盖了根.htaccess重写规则,并从子文件夹加载页面。