2011-08-30 97 views
0

我已经在.htaccess阿帕奇国防部重写

RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ page.php?name=$1&do=$2&newstitle=$3 [L] 
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ page.php?name=$1&do=$2&cattitle=$3 [L] 

设置2条规则,这就是我所说的网址:

​​

和不国防部重写:

www.domain.com/page.php?name=My-Page&do=news&newstitle=News-Title 
www.domain.com/page.php?name=My-Page&do=category&cattitle=Category-Title 

现在问题是因为两条规则都是相似的,无论如何,它总是回归到第一条规则。如果我删除第一条规则,第二条URL可以正常工作,但是它们都会重写第一条规则。

如何在两条规则都能正常工作的情况下实现此目的。我知道我错过了一些东西,但是在涉及到mod_rewrite时,我的专业知识是有限的。

任何帮助,非常感谢。

回答

0

这两个规则都不相似,它们是相同的,所以它总是会做第一个。

如果我要做到这一点(我真的不会,主要是因为我觉得这是对MVC模式的工厂工作更好的保留),我可能会这样说:

RewriteRule ^([^/]*)/news/([^/]*)\.html$ page.php?name=$1&do=news&newstitle=$2 [L] 
RewriteRule ^([^/]*)/category/([^/]*)\.html$ page.php?name=$1&do=category&cattitle=$2 [L] 

你需要一些方法来区分它们。这应该很简单。

编辑

只是想指出,你可以写这些:

RewriteRule ^(.+)/news/(.+)\.html$ page.php?name=$1&do=news&newstitle=$2 [L] 

我添加的偏好是去除.html

RewriteRule ^(.+)/news/(.+)$ page.php?name=$1&do=news&newstitle=$2 [L] 

我不喜欢暴露服务器技术,而HTML并没有增加任何我们不了解的网站。

就个人而言,我使用了类似的系统:

RewriteRule ^(.*)$ index.php?page=$1 [L,QSA] 

网址是由黑客攻击的index.php分开,到像格式:

http://www.example.com/<controller>/<arg1>/<arg2> 

这样,一个重写声明我告诉它去哪里,并且控制器返回适当的输出。之后我再也不需要更新.htaccess。如果我需要新的功能,我写一个新的控制器。只是要看看。

+0

非常感谢你,现在一切都很合理。 – Mike

相关问题