我的网站上运行Nginx的,我想在使用Apache的mod_rewrite规则网站的子目录中添加一个软件。 例如www.mydomain.com/mySubfolder
这里是Apache的.htaccess
#Options -Indexes
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/system.*
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/$1 [L]
</ifModule>
到目前为止,我设法让主网页的工作,但请求登录页面时,它是造成URL重定向循环。 例如www.myDomain.com/login有了这个:
location /mySubfolder {
if (!-e $request_filename) {
rewrite ^(.*)$ /mySubfolder/index.php?q=$1 last;
break;
}
}
我一直在读书,并努力学习如何阿帕奇转换为Nginx的,甚至使用的.htaccess到Nginx的转换器,我发现在http://winginx.com/htaccess但该工具似乎并没有认识到%{REQUEST_URI} ^ /system.*一部分。 在我的研究和学习,我想出了:
location /mySubfolder {
if ($request_uri ~ "^/(system.*)$") {
rewrite ^/(.*)$ index.php?/$1 last;
}
if (!-e $request_filename) {
rewrite ^(.+)$ /mySubfolder/index.php?q=$1 last;
break;
}
}
我在这一个完整的小白,如果我甚至接近完成这种转换工作有人甚至怀疑。 请帮忙。
谢谢。
有人甚至想,如果我甚至接近完成这种转换工作
你已经基本上采取了错误的做法,Nginx的使用。
虽然它是一种天然的假设,在Apache的重写规则将被映射到Nginx的重写,他们不是。 相反,他们大多是映射到位置的规则。
您的块mySubfolder
应该是这样的:
location ^/mySubfolder {
try_files /mySubfolder/index.php?$args =404;
}
你实际上并没有任何改写-你只是告知与/ MySubfolder启动任何请求应在列出的文件送达nginx的try_files
。 顺便说一句,你要告诉Nginx的传递查询字符串,通过这是什么args
在做什么。
您可以将原始URL(我认为),虽然它可能是更容易只是使用$_SERVER['REQUEST_URI']
你的脚本中。
我相信你有相同的开始URI重写规则是造成/ mySubFolder以保持匹配。
在Nginx的重写,当你想使外部URL路径由不同的内部URL提供服务,通常重写规则不是一个位置块中才会被使用。
比如我有一个文件服务器,它提供了图像和其他文件。 我在服务器块,这些重写规则:
rewrite ^/image/(\d+)/(\w+)/(.+)\.([^\.]*)$ /proxy/proxyImage.php?typeID=$1&mode=$2&imagePath=$3.$4&resizeAllowed=TRUE&type=image last;
rewrite ^/image/(\d+)/(.+)\.([^\.]*)$ /proxy/proxyImage.php?typeID=$1&imagePath=$2.$3&resizeAllowed=TRUE last;
rewrite ^/file/(\d+)/(.+)\.([^\.]*)$ /proxy/proxyFile.php?typeID=$1&imagePath=$2.$3&resizeAllowed=FALSE last;
使外部URL看起来不错。 不过,他们都是由所在地块服务:
location ~* ^/proxy {
try_files $uri =404;
fastcgi_pass unix:/opt/local/var/run/php54/php-fpm-images.sock;
include /documents/projects/intahwebz/intahwebz/conf/fastcgi.conf;
}
所在地块并不需要了解的URL重写,因为遇到所在地块才完成。