我有关于magento中重写规则index.php的问题。
实施例。 domain / indoor.html是500内部服务器错误但是 domain / index.php / indoor.html可以显示。
My nginx.conf is
user root;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
multi_accept on;
use epoll;
}
http {
index index.html index.php;
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
## Gzipping is an easy way to reduce page weight
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_types text/css application/x-javascript;
gzip_buffers 16 8k;
gzip_comp_level 8;
gzip_min_length 1024;
## SSL global settings
#ssl_session_cache shared:SSL:15m;
#ssl_session_timeout 15m;
#ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH;
#ssl_prefer_server_ciphers on;
keepalive_timeout 10;
## Nginx will not add the port in the url when the request is redirected.
#port_in_redirect off;
## Multi domain configuration
#map $http_host $storecode {
#www.domain1.com 1store_code; ## US main
#www.domain2.net 2store_code; ## EU store
#www.domain3.de 3store_code; ## German store
#www.domain4.com 4store_code; ## different products
#}
## Add www
server {
listen 80;
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
}
server {
listen 80;
#listen 443 ssl;
server_name 192.168.85.114;
root /var/www/html;
access_log /var/log/nginx/access_192.168.85.114.log main;
if ($http_user_agent = "") { return 444;}
####################################################################################
## SSL CONFIGURATION
#ssl_certificate /etc/ssl/certs/www_server_com.chained.crt;
#ssl_certificate_key /etc/ssl/certs/server.key;
####################################################################################
## Server maintenance block. insert dev ip 1.2.3.4 static address www.whatismyip.com
#if ($remote_addr !~ "^(1.2.3.4|1.2.3.4)$") {
#return 503;
#}
#error_page 503 @maintenance;
#location @maintenance {
#rewrite ^(.*)$ /error_page/503.html break;
#internal;
#access_log off;
#log_not_found off;
#}
####################################################################################
## 403 error log/page
#error_page 403 /403.html;
#location = /403.html {
#root /var/www/html/error_page;
#internal;
#access_log /var/log/nginx/403.log error403;
#}
####################################################################################
## Main Magento location
location / {
try_files $uri $uri/ @handler;
}
####################################################################################
## These locations would be hidden by .htaccess normally, protected
location ~ (/(app/|includes/|/pkginfo/|var/|errors/local.xml)|/\.svn/|/.ht.+) {
deny all;
#internal;
}
####################################################################################
## Protecting /admin/ and /downloader/ 1.2.3.4 = static ip (www.whatismyip.com)
#location /downloader/ {
#allow 1.2.3.4; allow 1.2.3.4; deny all;
#rewrite ^/downloader/(.*)$ /downloader/index.php$1;
#}
#location /admin {
#allow 1.2.3.4; allow 1.2.3.4; deny all;
#rewrite / /@handler;
#}
####################################################################################
## Images, scripts and styles set far future Expires header
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
open_file_cache max=10000 inactive=48h;
open_file_cache_valid 48h;
open_file_cache_min_uses 2;
open_file_cache_errors off;
expires max;
log_not_found off;
access_log off;
}
####################################################################################
## Main Magento location
location @handler {
rewrite / /index.php?$args;
}
location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
rewrite ^(.*.php)/ $1 last;
}
####################################################################################
## Execute PHP scripts
location ~ .php$ {
add_header X-UA-Compatible 'IE=Edge,chrome=1';
try_files $uri $uri/ =404;
#try_files $uri $uri/ @handler;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
## Store code with multi domain
#fastcgi_param MAGE_RUN_CODE $storecode;
## Default Store code
fastcgi_param MAGE_RUN_CODE default;
fastcgi_param MAGE_RUN_TYPE store; ## or website;
include fastcgi_params; ## See /etc/nginx/fastcgi_params;
if (!-e $request_filename) {
rewrite / /index.php last;
}
}
}
}
但这不能改写index.php,请帮助我解决这个问题。
答案 0 :(得分:4)
你是通过在最终位置内做另一个try_files来创建一个循环。当我在桌面后面时,我会用一个例子修改我的答案。
好的,这就是让nginx与Magento合作的细节。首先,你的否认有问题:
location ~ (/(app/|includes/|/pkginfo/|var/|errors/local.xml)|/\.svn/|/.ht.+) {
/ pkginfo /不应包含前导斜杠,并且最安全的使用/。而不是特别命名.svn和.ht:如果你曾经切换到Mercurial或Git,你也不希望那些访问过。作为旁注 - 对于nginx .ht是没有必要的。
你缺少/ lib /这就是我通常将拒绝分成两部分的原因:
location ~ ^/(app/|includes/|pkginfo/|var/|errors/local.xml|lib/|media/downloadable/) { deny all; }
location ~ /\. { deny all; }
请注意,第一个锚定在开头。这对于/ lib /是必要的,因为/ js / lib /是一个需要打开的有效路径,并且没有锚定到请求uri的开头,它将匹配,并且访问者将无法加载JavaScript库。
处理重写:
首先,基地位置。设置索引,尝试使用uri并将处理程序定义为catch all。
location / {
index index.php;
try_files $uri $uri/ @handler;
}
在处理程序中,将所有内容重写为index.php:
location @handler {
rewrite / /index.php;
}
最后,处理php文件。如果try_files没有捕获它,我们会对现有的php文件进行最终检查,然后拆分路径信息并传递params。如果多线程有效,我们还会根据变量$ store设置MAGE_ *变量。如何映射这些,你已经在配置中开始了,所以我不会重复它:
location ~ \.php(/.*)? {
if (!-e $request_filename) {
rewrite / /index.php last;
}
expires off;
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.*\.php)(/.*)?$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param MAGE_RUN_CODE $store;
fastcgi_param MAGE_RUN_TYPE "store";
include fastcgi_params;
}
就是这样。希望它有所帮助。
答案 1 :(得分:0)
您的问题可能在@handler
位置,是您自己编写还是在magento文档上?
我建议您尝试rewrite ^ /index.php$request_uri;
答案 2 :(得分:-2)
你应该编辑你的httpd.conf文件
linux中的尝试添加此代码 /etc/apache2/apache2.conf文件
<Directory "/var/www/magento"> // Path for your site
AllowOverride All
</Directory>