Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache Web服务器URL重写_Apache_Url Rewriting_Nginx - Fatal编程技术网

Apache Web服务器URL重写

Apache Web服务器URL重写,apache,url-rewriting,nginx,Apache,Url Rewriting,Nginx,我想对以下内容进行URL重写配置: 允许我的网站URL像site.com/category/item一样重定向到index.php?c=$1&i=$2 允许从config site.com/config/conf.txt等目录中包含文件 将类似site.com/admin/category/item的URL重定向到admin.php?c=$1&i=$2 到目前为止,我成功地制定了以下两条规则: RewriteRule ^([a-z]+)/([^\.^/]+)$ index.php?c=$1&am

我想对以下内容进行URL重写配置:

允许我的网站URL像site.com/category/item一样重定向到index.php?c=$1&i=$2 允许从config site.com/config/conf.txt等目录中包含文件 将类似site.com/admin/category/item的URL重定向到admin.php?c=$1&i=$2 到目前为止,我成功地制定了以下两条规则:

RewriteRule ^([a-z]+)/([^\.^/]+)$ index.php?c=$1&i=$2 [L]
RewriteRule ^[^/]+/([^/]+)$ $1
这些适用于前两项,但我无法找到第三项适用于现有规则

目前我正在使用Apache,但我也期待着使用NGinx。如果规则是兼容的,那就太好了

你有什么建议吗?

答案如下:

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/开头,那么只需尝试应用其他重写规则,从而允许从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

告诉我它是否有效。

非常感谢这个提示:日志解释了重写之后的所有过程!很高兴看到在规则匹配后检查了条件。。。即使对日志文件的多线程访问使它像意大利面条碗一样乱七八糟

以下是我使用的规则:

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规则都是可重入的。

除非你的名字是user,姓氏是573152,否则你仍然不知道。在这种情况下,我当然会道歉。为什么匿名总是个坏主意?我不愿意使用这些“社交”网络是有原因的。这个网站给了我一个编号的用户名,我很满意。我们能回到主题上来吗?首先,谢谢你的帮助。我试过了,但是配置没用。当尝试从PHP文件中包含配置文件时,当我尝试访问site.com/category/item时,我得到以下错误:在此服务器上找不到请求的URL/category/config/config.txt。