2011-11-18 63 views
0

我想作一个URL重写配置d以下的行吟诗人?Web服务器的URL重写

  1. 允许自己的网站网址出现像site.com/category/item(重定向到index.php C = $ 1 & I = $ 2)
  2. 允许从像配置(site.com/config/conf.txt)
  3. 重定向URL等site.com/admin/category/item到admin.php的目录包括文件? c = $ 1 & i = $ 2

到目前为止,我设法建立这条规则:

RewriteRule ^([a-z]+)/([^\.^/]+)$ index.php?c=$1&i=$2 [L] 
RewriteRule ^[^/]+/([^/]+)$ $1 

这些工作为先2项,但我不能设法找到第三个,将与现有的规则工作...

目前我使用Apache,但我也期待使用NGinx。如果规则是兼容的,那将会很棒。

你有什么建议吗?

+0

除非你的名字是'user',你的姓氏'573152'(在这种情况下我会道歉的),你还是一个未知数。 –

+0

为什么要匿名总是一个坏主意?出于某种原因,我不愿意这些“社交”网络。这个网站给了我一个编号的用户名,我对此感到满意。我们能回到这个话题吗? –

回答

0

这里的答案:

RewriteCond %{REQUEST_URI} !config 
RewriteRule ^([a-z]+)/([^\.^/]+)$ index.php?c=$1&i=$2 [L] 

RewriteCond %{REQUEST_URI} !config 
RewriteRule ^admin/([a-z]+)/([^\.^/]+)$ admin.php?c=$1&i=$2 [L] 

翻译:如果URI不/config/开始,然后(只有)尝试应用其他重写规则,所以“允许从像配置目录(包含文件site.com/config/conf.txt)“仍然将规则应用于其他URL。


请尽量使用RewriteLog指令:它可以帮助您追踪到这样的问题:

# Trace: 
# (!) file gets big quickly, remove in prod environments: 
RewriteLog "/web/logs/mywebsite.rewrite.log" 
RewriteLogLevel 9 
RewriteEngine On 

告诉我,如果它的工作原理。

+0

首先,感谢您的帮助。我尝试过,但配置没有奏效。当试图从PHP文件中包含配置文件时,当我尝试访问'site.com/category/item'时,出现以下错误:'找不到所请求的URL /category/config/config.txt这个服务器。' –

+0

我编辑了我的rewriterules告诉我它是否可以工作 –

0

非常感谢这个提示:日志解释了所有关于重写的过程!很高兴看到条件在规则匹配后被检查......即使多线程访问日志文件使其像意大利面碗一样流露出来。

下面是我使用的规则:

RewriteCond %{REQUEST_URI} !/config/([^\.]+/)*[a-z\.^/]+$ 
RewriteRule ^([a-z]+)/([^\.^/]+)$ index.php?c=$1&i=$2 [L] 

RewriteCond %{REQUEST_URI} !/config/([^\.]+/)*[a-z\.^/]+$ 
RewriteRule ^admin/([a-z]+)/([^\.^/]+)$ admin.php?c=$1&i=$2 [L] 

RewriteCond %{REQUEST_URI} /config/([^\.]+/)*[a-z\.^/]+$ 
RewriteRule /config/(([^\.]+/)*[a-z\.^/]+)$ config/$1 [L] 

我开始通过从一开始就从端检查该URL,而不是,因为这些规则可以然后在根目录的子目录被应用。 我允许调用config目录下的子目录。 最后一条规则是可重入的,但如果将规则应用于根目录中,请避免其他重新编程。如果不是,则表达式不匹配,并且应用该规则以产生与输入相同的输出。

通常,避免服务器再次将重定向规则应用于先前重定向的URI是毫无意义的。文档告诉我有一个[END]标志这样做,但我没能成功实践... 因此,对我而言,所有的htaccess规则都应该是可重入的。