我的网站以前是在Apache服务器上.这是一个自定义的PHP站点,几乎每个文件夹都有.htaccess.我已经设法获得主目录上的.htaccess的一部分来处理Nginx,但是我无法对每个目录的.htaccess指令做同样的事情.
以下是一些.htaccess文件:
主要.htaccess:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^search(.+)/$search.PHP?search=$1 [L]
RewriteRule ^search(.+)/page/(.+)/$search.PHP?search=$1&page=$2 [L]
RewriteRule ^nonton/(.+)/$download.PHP?download=$1 [L]
RewriteRule ^nonton/(.+)/(.+)/$download.PHP?download=$1&size=$2 [L]
RewriteRule ^get/(.+)/$get_dl.PHP?dl=$1 [L]
RewriteRule ^(.+)-live-streaming/$tv.PHP?tv=$1 [L]
RewriteRule ^thumb/(.+)$data/thumb.PHP?i=$1 [L]
RewriteRule ^sitemap.xml$sitemap.PHP [L]
Options -Indexes
国家/地区的URL:
RewriteEngine On
RewriteBase /country/
RewriteRule ^(.+)/$index.PHP?country=$1 [L]
RewriteRule ^(.+)/page/(.+)/$index.PHP?country=$1&page=$2 [L]
网址类型:
RewriteEngine On
RewriteBase /genre/
RewriteRule ^(.+)/$index.PHP?genre=$1 [L]
RewriteRule ^(.+)/page/(.+)/$index.PHP?genre=$1&page=$2 [L]
标记网址:
RewriteEngine On
RewriteBase /tag/
RewriteRule ^(.+)/$index.PHP?tag=$1 [L]
RewriteRule ^(.+)/page/(.+)/$index.PHP?tag=$1&page=$2 [L]
页面网址:
RewriteEngine On
RewriteBase /title/
RewriteRule ^page/(.+)/$index.PHP?page=$1 [L]
Nginx等效项是你的Nginx.conf中的location
指令,例如:
http {
. . .
server {
. . .
location /country/ {
rewrite ^/country/(.+)/$/country/index.PHP?country=$1 break;
rewrite ^/country/(.+)/page/(.+)/$/country/index.PHP?country=$1&page=$2 break;
}
location /genre/ {
rewrite ^/genre/(.+)/$/genre/index.PHP?genre=$1 break;
rewrite ^/genre/(.+)/page/(.+)/$/genre/index.PHP?genre=$1&page=$2 break;
}
}
}
在这里,您可以使用您找到的任何conversion tool的重写规则,但您也可以自己学习如何转换它们,因为语法非常相似:
> Apache的RewriteRule
指令:RewriteRule模式替换[flags]
> Nginx的rewrite
指令:重写正则表达式替换[flag];
替换与替换相同.正则表达式(模式)格式相同.但:
>在Nginx中,您必须包括前导/开头(也是^ /,/ country /等).
>替换也是根相对的,因此您必须包括领先/国家/等.
>你需要;在每条规则行的末尾.
标志有这些等价物:
> [L] – >最后一个内部服务器{}并在内部位置{}.
这部分实际上是至关重要的,因为大多数转换器无法理解上下文差异!
But if these directives are put inside a
location
,thelast
flag should be replaced bybreak
,or otherwise Nginx will
make 10 cycles and return the 500 error.
> [R = 302] – >重定向
> [R = 301] – >常驻
Apache的重写conditions像RewriteCond%{HTTP_HOST} ^ example.com可以在Nginx中用if
directives替换:if($http_host~“^ example.com”){},例如
location / {
if ($http_host ~ "^example.com"){
rewrite ^(.*)$http://www.example.com/$1 redirect;
}
rewrite ^/(.+)-live-streaming/$/tv.PHP?tv=$1 break;
}
您可以通过阅读链接的手册并使用转换工具进行教育来学习其余内容. (我之前链接到apache2nginx转换工具,无法处理根相关性并使用break而不是last.WiNginx的htaccess to nginx converter工作得更好.)