mod_rewrite Multiple Variables and Subfolders

♀尐吖头ヾ 提交于 2019-12-12 23:02:00

问题


On my site I have multiple URLs like this:

Main Page:

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

Subfolders:

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

I'd like to make clean these up to be:

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

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

Now, I've been able to use mod_rewrite for one variable, and some other simple things, but I'm not exactly sure how to accomplish this. When I use:

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

It recognizes the sections of the URL as variables, but it also sees the subsite as a variable, and attempts to plug in 'subsite' for 'content'.

Would anyone be able to point me in the right direction?


回答1:


You could tweak you existing rule to allow for an OPTIONAL subsite/ or subsite2/ prefix e.g.

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

Or just add a rule to handle the subsites before the existing rule e.g.

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]



回答2:


I ended up getting this to work by putting another .htaccess file in the subsite folder.

The root .htaccess has:

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]


In the subsite .htaccess I have: (same as 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]

If you do not need to alter the subdirectory's url, add only RewriteEngine On to the subsite's .htaccess. This basically overrides the root .htaccess rewrite rules, and loads the page from the subfolder.



来源:https://stackoverflow.com/questions/13437176/mod-rewrite-multiple-variables-and-subfolders

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!