使用.htaccess重写复杂URL

时间:2013-08-09 21:39:10

标签: .htaccess url url-rewriting

这是我想要实现的目标

www.example.com/category
www.example.com/category/subcategory
www.example.com/category/subcategory/product
www.example.com/static-page (like /about-us, /contact, /our-services)

(类别,子类别,产品,静态页面等是动态文本,数据库中有一个固定的东西)

如果您看到上述所有请求,您会注意到它们就像每次点击链接时将目录sturcutre扩展一步,例如,首先是类别,然后当我点击子目录时,我被发送了到category / subcategory /和finally到产品页面

任何人都可以帮助我如何实现这一切,我已经尝试了很多来实现这一目标但是徒劳无功。 目前我正在使用此.htaccess

RewriteRule c/(.*)/(.*)/ cat-details.php?permalink=$1&subcat=$2
RewriteRule c/(.*)/(.*) cat-details.php?permalink=$1&subcat=$2

RewriteRule news/(.*)/(.*)/ news-detail.php?news-id=$1&permalink=$2
RewriteRule news/(.*)/(.*) news-detail.php?news-id=$1&permalink=$2

RewriteRule d/(.*)/(.*)/(.*)/(.*)/ download-detail.php?download-id=$1category=$2&subcategory=$3&permalink=$4
RewriteRule d/(.*)/(.*)/(.*)/(.*) download-detail.php?download-id=$1category=$2&subcategory=$3&permalink=$4 

正如你所看到的,我必须为每个链接添加c /,news /,d / etc,我正在试图摆脱这个并且想要使链接相当白色进行c /,news /,d / etc < / p>

2 个答案:

答案 0 :(得分:0)

关于您能够在Apache中正确执行此操作的唯一方法是提供有关哪些URL映射到哪些脚本的信息。 Apache允许您通过RewriteMap指令执行此操作,但这在.htaccess文件中不起作用。没有它,没有news/c/,Apache没有足够的信息来正确路由URL。

您可以做的只是将每个不引用现有文件的URL重写为一个脚本,该脚本知道响应中运行哪些脚本。他们称之为“路由器”或“前端控制器”脚本。像这样:

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule (.*)   router.php?path=$1  [QSA]

在脚本中,您检查$_GET['path'],确定哪个脚本应该处理请求,并加载/包含/要求它。

答案 1 :(得分:0)

我自己找到了一种方法,如果它可以像我一样帮助其他遇到麻烦的人发布它:p

    RewriteRule ^([^/]*)\/$ /romuniverse/cat.php?permalink=$1 [L]
    RewriteRule ^([^/]*)/([^/]*)\/$ /romuniverse/sub-cat.php?permalink=$1&subcat=$2 [L]
    RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)\.rar$ /romuniverse/download-detail.php?download-id=$1&category=$2&subcategory=$3&permalink=$4 [L]